From 24147c43690f8128acaa64468c3b4d2907768e27 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Sat, 20 Jul 2024 15:57:27 -0400 Subject: [PATCH 001/146] cpu and memory optimizations --- .../java/com/iab/gpp/encoder/GppModel.java | 324 +++++++----------- .../base64/AbstractBase64UrlEncoder.java | 79 ++--- .../base64/CompressedBase64UrlEncoder.java | 2 +- .../base64/TraditionalBase64UrlEncoder.java | 2 +- .../iab/gpp/encoder/bitstring/BitString.java | 135 ++++++++ .../encoder/bitstring/BitStringBuilder.java | 34 ++ .../encoder/bitstring/BitStringEncoder.java | 20 +- .../AbstractEncodableBitStringDataType.java | 6 +- .../EncodableArrayOfFixedIntegerRanges.java | 57 +-- .../encoder/datatype/EncodableBoolean.java | 5 +- .../encoder/datatype/EncodableDataType.java | 4 +- .../encoder/datatype/EncodableDatetime.java | 6 +- .../datatype/EncodableFibonacciInteger.java | 5 +- .../EncodableFibonacciIntegerRange.java | 10 +- .../datatype/EncodableFixedBitfield.java | 15 +- .../datatype/EncodableFixedInteger.java | 5 +- .../datatype/EncodableFixedIntegerList.java | 6 +- .../datatype/EncodableFixedIntegerRange.java | 8 +- .../datatype/EncodableFixedString.java | 5 +- .../datatype/EncodableFlexibleBitfield.java | 6 +- .../EncodableOptimizedFibonacciRange.java | 15 +- .../EncodableOptimizedFixedRange.java | 15 +- .../encoder/ArrayOfRangesEntryEncoder.java | 20 +- .../datatype/encoder/BooleanEncoder.java | 18 +- .../datatype/encoder/DatetimeEncoder.java | 12 +- .../encoder/FibonacciIntegerEncoder.java | 26 +- .../encoder/FibonacciIntegerRangeEncoder.java | 36 +- .../encoder/FixedBitfieldEncoder.java | 40 +-- .../datatype/encoder/FixedIntegerEncoder.java | 38 +- .../encoder/FixedIntegerListEncoder.java | 54 ++- .../encoder/FixedIntegerRangeEncoder.java | 44 +-- .../datatype/encoder/FixedLongEncoder.java | 21 +- .../datatype/encoder/FixedStringEncoder.java | 45 ++- .../datatype/encoder/IntegerCache.java | 20 ++ .../OptimizedFibonacciRangeEncoder.java | 28 +- .../encoder/OptimizedFixedRangeEncoder.java | 28 +- .../iab/gpp/encoder/field/HeaderV1Field.java | 8 +- .../iab/gpp/encoder/field/TcfCaV1Field.java | 54 +-- .../iab/gpp/encoder/field/TcfEuV2Field.java | 66 ++-- .../com/iab/gpp/encoder/field/UsCaField.java | 34 +- .../com/iab/gpp/encoder/field/UsCoField.java | 32 +- .../com/iab/gpp/encoder/field/UsCtField.java | 32 +- .../com/iab/gpp/encoder/field/UsNatField.java | 42 +-- .../com/iab/gpp/encoder/field/UsUtField.java | 26 +- .../com/iab/gpp/encoder/field/UsVaField.java | 24 +- .../com/iab/gpp/encoder/field/UspV1Field.java | 8 +- ...actEncodableSegmentedBitStringSection.java | 35 +- .../com/iab/gpp/encoder/section/HeaderV1.java | 13 +- .../com/iab/gpp/encoder/section/Sections.java | 4 +- .../com/iab/gpp/encoder/section/TcfCaV1.java | 19 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 20 +- .../com/iab/gpp/encoder/section/UsCa.java | 16 +- .../com/iab/gpp/encoder/section/UsCo.java | 18 +- .../com/iab/gpp/encoder/section/UsCt.java | 14 +- .../com/iab/gpp/encoder/section/UsNat.java | 14 +- .../com/iab/gpp/encoder/section/UsUt.java | 13 +- .../com/iab/gpp/encoder/section/UsVa.java | 13 +- .../com/iab/gpp/encoder/section/UspV1.java | 13 +- .../AbstractLazilyEncodableSegment.java | 11 +- .../encoder/segment/HeaderV1CoreSegment.java | 5 +- .../encoder/segment/TcfCaV1CoreSegment.java | 21 +- .../TcfCaV1DisclosedVendorsSegment.java | 5 +- .../TcfCaV1PublisherPurposesSegment.java | 16 +- .../encoder/segment/TcfEuV2CoreSegment.java | 21 +- .../TcfEuV2PublisherPurposesSegment.java | 16 +- .../segment/TcfEuV2VendorsAllowedSegment.java | 5 +- .../TcfEuV2VendorsDisclosedSegment.java | 5 +- .../gpp/encoder/segment/UsCaCoreSegment.java | 3 +- .../gpp/encoder/segment/UsCaGpcSegment.java | 3 +- .../gpp/encoder/segment/UsCoCoreSegment.java | 3 +- .../gpp/encoder/segment/UsCoGpcSegment.java | 3 +- .../gpp/encoder/segment/UsCtCoreSegment.java | 3 +- .../gpp/encoder/segment/UsCtGpcSegment.java | 3 +- .../gpp/encoder/segment/UsMtGpcSegment.java | 3 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 3 +- .../gpp/encoder/segment/UsUtCoreSegment.java | 3 +- .../gpp/encoder/segment/UsVaCoreSegment.java | 3 +- .../gpp/encoder/segment/UspV1CoreSegment.java | 12 +- .../TraditionalBase64UrlEncoderTest.java | 6 +- .../datatype/EncodableBooleanTest.java | 6 +- .../datatype/EncodableDatetimeTest.java | 6 +- .../EncodableFibonacciIntegerRangeTest.java | 4 +- .../EncodableFibonacciIntegerTest.java | 4 +- .../datatype/EncodableFixedBitfieldTest.java | 6 +- .../EncodableFixedIntegerListTest.java | 6 +- .../EncodableFixedIntegerRangeTest.java | 14 +- .../datatype/EncodableFixedIntegerTest.java | 6 +- .../datatype/EncodableFixedStringTest.java | 6 +- .../EncodableOptimizedFixedRangeTest.java | 18 +- .../datatype/encoder/BooleanEncoderTest.java | 16 +- .../datatype/encoder/DatetimeEncoderTest.java | 4 +- .../encoder/FibonacciIntegerEncoderTest.java | 22 +- .../FibonacciIntegerRangeEncoderTest.java | 18 +- .../encoder/FixedBitfieldEncoderTest.java | 18 +- .../encoder/FixedIntegerEncoderTest.java | 16 +- .../encoder/FixedIntegerListEncoderTest.java | 42 +-- .../encoder/FixedIntegerRangeEncoderTest.java | 22 +- .../encoder/FixedLongEncoderTest.java | 18 +- .../encoder/FixedStringEncoderTest.java | 8 +- iabgpp-jmh/pom.xml | 144 ++++++++ .../java/com/iab/gpp/encoder/MyBenchmark.java | 41 +++ pom.xml | 1 + 102 files changed, 1304 insertions(+), 1007 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java create mode 100644 iabgpp-jmh/pom.xml create mode 100644 iabgpp-jmh/src/main/java/com/iab/gpp/encoder/MyBenchmark.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index b4f8cba3..a6e1eee4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -53,6 +53,57 @@ public void setFieldValue(int sectionId, String fieldName, Object value) { setFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName, value); } + private EncodableSection getOrCreateSection(String sectionName) { + EncodableSection section = this.sections.get(sectionName); + if (section == null) { + switch(sectionName) { + case TcfEuV2.NAME: + section = new TcfEuV2(); + break; + case TcfCaV1.NAME: + section = new TcfCaV1(); + break; + case UspV1.NAME: + section = new UspV1(); + break; + case UsNat.NAME: + section = new UsNat(); + break; + case UsCa.NAME: + section = new UsCa(); + break; + case UsVa.NAME: + section = new UsVa(); + break; + case UsCo.NAME: + section = new UsCo(); + break; + case UsUt.NAME: + section = new UsUt(); + break; + case UsCt.NAME: + section = new UsCt(); + break; + case UsFl.NAME: + section = new UsFl(); + break; + case UsMt.NAME: + section = new UsMt(); + break; + case UsOr.NAME: + section = new UsOr(); + break; + case UsTx.NAME: + section = new UsTx(); + break; + } + if (section != null) { + this.sections.put(sectionName, section); + } + } + return section; + } + public void setFieldValue(String sectionName, String fieldName, Object value) { if (!this.decoded) { this.sections = this.decodeModel(this.encodedString); @@ -60,70 +111,7 @@ public void setFieldValue(String sectionName, String fieldName, Object value) { this.decoded = true; } - EncodableSection section = null; - if (!this.sections.containsKey(sectionName)) { - if (sectionName.equals(TcfCaV1.NAME)) { - section = new TcfCaV1(); - this.sections.put(TcfCaV1.NAME, section); - } else if (sectionName.equals(TcfEuV2.NAME)) { - section = new TcfEuV2(); - this.sections.put(TcfEuV2.NAME, section); - } else if (sectionName.equals(UspV1.NAME)) { - section = new UspV1(); - this.sections.put(UspV1.NAME, section); - } else if (sectionName.equals(UsNat.NAME)) { - section = new UsNat(); - this.sections.put(UsNat.NAME, section); - } else if (sectionName.equals(UsCa.NAME)) { - section = new UsCa(); - this.sections.put(UsCa.NAME, section); - } else if (sectionName.equals(UsVa.NAME)) { - section = new UsVa(); - this.sections.put(UsVa.NAME, section); - } else if (sectionName.equals(UsCo.NAME)) { - section = new UsCo(); - this.sections.put(UsCo.NAME, section); - } else if (sectionName.equals(UsUt.NAME)) { - section = new UsUt(); - this.sections.put(UsUt.NAME, section); - } else if (sectionName.equals(UsCt.NAME)) { - section = new UsCt(); - this.sections.put(UsCt.NAME, section); - } else if (sectionName.equals(UsFl.NAME)) { - section = new UsFl(); - this.sections.put(UsFl.NAME, section); - } else if (sectionName.equals(UsMt.NAME)) { - section = new UsMt(); - this.sections.put(UsMt.NAME, section); - } else if (sectionName.equals(UsOr.NAME)) { - section = new UsOr(); - this.sections.put(UsOr.NAME, section); - } else if (sectionName.equals(UsTx.NAME)) { - section = new UsTx(); - this.sections.put(UsTx.NAME, section); - } else if (sectionName.equals(UsDe.NAME)) { - section = new UsDe(); - this.sections.put(UsDe.NAME, section); - } else if (sectionName.equals(UsIa.NAME)) { - section = new UsIa(); - this.sections.put(UsIa.NAME, section); - } else if (sectionName.equals(UsNe.NAME)) { - section = new UsNe(); - this.sections.put(UsNe.NAME, section); - } else if (sectionName.equals(UsNh.NAME)) { - section = new UsNh(); - this.sections.put(UsNh.NAME, section); - } else if (sectionName.equals(UsNj.NAME)) { - section = new UsNj(); - this.sections.put(UsNj.NAME, section); - } else if (sectionName.equals(UsTn.NAME)) { - section = new UsTn(); - this.sections.put(UsTn.NAME, section); - } - } else { - section = this.sections.get(sectionName); - } - + EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.setFieldValue(fieldName, value); this.dirty = true; @@ -143,8 +131,9 @@ public Object getFieldValue(String sectionName, String fieldName) { this.decoded = true; } - if (this.sections.containsKey(sectionName)) { - return this.sections.get(sectionName).getFieldValue(fieldName); + EncodableSection field = this.sections.get(sectionName); + if (field != null) { + return field.getFieldValue(fieldName); } else { return null; } @@ -161,8 +150,9 @@ public boolean hasField(String sectionName, String fieldName) { this.decoded = true; } - if (this.sections.containsKey(sectionName)) { - return this.sections.get(sectionName).hasField(fieldName); + EncodableSection field = this.sections.get(sectionName); + if (field != null) { + return field.hasField(fieldName); } else { return false; } @@ -209,11 +199,7 @@ public EncodableSection getSection(String sectionName) { this.decoded = true; } - if (this.sections.containsKey(sectionName)) { - return this.sections.get(sectionName); - } else { - return null; - } + return this.sections.get(sectionName); } public void deleteSection(int sectionId) { @@ -227,8 +213,7 @@ public void deleteSection(String sectionName) { this.decoded = true; } - if (this.sections.containsKey(sectionName)) { - this.sections.remove(sectionName); + if (this.sections.remove(sectionName) != null) { this.dirty = true; } } @@ -323,11 +308,12 @@ public List getSectionIds() { this.decoded = true; } - List sectionIds = new ArrayList<>(); - for (int i = 0; i < Sections.SECTION_ORDER.size(); i++) { + int length = Sections.SECTION_ORDER.size(); + List sectionIds = new ArrayList<>(length); + for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); - if (this.sections.containsKey(sectionName)) { - EncodableSection section = this.sections.get(sectionName); + EncodableSection section = this.sections.get(sectionName); + if (section != null) { sectionIds.add(section.getId()); } } @@ -335,12 +321,13 @@ public List getSectionIds() { } protected String encodeModel(Map sections) { - List encodedSections = new ArrayList<>(); - List sectionIds = new ArrayList<>(); - for (int i = 0; i < Sections.SECTION_ORDER.size(); i++) { + int length = Sections.SECTION_ORDER.size(); + List encodedSections = new ArrayList<>(length); + List sectionIds = new ArrayList<>(length); + for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); - if (sections.containsKey(sectionName)) { - EncodableSection section = sections.get(sectionName); + EncodableSection section = sections.get(sectionName); + if (section != null) { encodedSections.add(section.encode()); sectionIds.add(section.getId()); } @@ -370,63 +357,47 @@ protected Map decodeModel(String str) { @SuppressWarnings("unchecked") List sectionIds = (List) header.getFieldValue("SectionIds"); for (int i = 0; i < sectionIds.size(); i++) { - if (sectionIds.get(i).equals(TcfEuV2.ID)) { - TcfEuV2 section = new TcfEuV2(encodedSections[i + 1]); - sections.put(TcfEuV2.NAME, section); - } else if (sectionIds.get(i).equals(TcfCaV1.ID)) { - TcfCaV1 section = new TcfCaV1(encodedSections[i + 1]); - sections.put(TcfCaV1.NAME, section); - } else if (sectionIds.get(i).equals(UspV1.ID)) { - UspV1 section = new UspV1(encodedSections[i + 1]); - sections.put(UspV1.NAME, section); - } else if (sectionIds.get(i).equals(UsCa.ID)) { - UsCa section = new UsCa(encodedSections[i + 1]); - sections.put(UsCa.NAME, section); - } else if (sectionIds.get(i).equals(UsNat.ID)) { - UsNat section = new UsNat(encodedSections[i + 1]); - sections.put(UsNat.NAME, section); - } else if (sectionIds.get(i).equals(UsVa.ID)) { - UsVa section = new UsVa(encodedSections[i + 1]); - sections.put(UsVa.NAME, section); - } else if (sectionIds.get(i).equals(UsCo.ID)) { - UsCo section = new UsCo(encodedSections[i + 1]); - sections.put(UsCo.NAME, section); - } else if (sectionIds.get(i).equals(UsUt.ID)) { - UsUt section = new UsUt(encodedSections[i + 1]); - sections.put(UsUt.NAME, section); - } else if (sectionIds.get(i).equals(UsCt.ID)) { - UsCt section = new UsCt(encodedSections[i + 1]); - sections.put(UsCt.NAME, section); - } else if (sectionIds.get(i).equals(UsFl.ID)) { - UsFl section = new UsFl(encodedSections[i + 1]); - sections.put(UsFl.NAME, section); - } else if (sectionIds.get(i).equals(UsMt.ID)) { - UsMt section = new UsMt(encodedSections[i + 1]); - sections.put(UsMt.NAME, section); - } else if (sectionIds.get(i).equals(UsOr.ID)) { - UsOr section = new UsOr(encodedSections[i + 1]); - sections.put(UsOr.NAME, section); - } else if (sectionIds.get(i).equals(UsTx.ID)) { - UsTx section = new UsTx(encodedSections[i + 1]); - sections.put(UsTx.NAME, section); - } else if (sectionIds.get(i).equals(UsDe.ID)) { - UsDe section = new UsDe(encodedSections[i + 1]); - sections.put(UsDe.NAME, section); - } else if (sectionIds.get(i).equals(UsIa.ID)) { - UsIa section = new UsIa(encodedSections[i + 1]); - sections.put(UsIa.NAME, section); - } else if (sectionIds.get(i).equals(UsNe.ID)) { - UsNe section = new UsNe(encodedSections[i + 1]); - sections.put(UsNe.NAME, section); - } else if (sectionIds.get(i).equals(UsNh.ID)) { - UsNh section = new UsNh(encodedSections[i + 1]); - sections.put(UsNh.NAME, section); - } else if (sectionIds.get(i).equals(UsNj.ID)) { - UsNj section = new UsNj(encodedSections[i + 1]); - sections.put(UsNj.NAME, section); - } else if (sectionIds.get(i).equals(UsTn.ID)) { - UsTn section = new UsTn(encodedSections[i + 1]); - sections.put(UsTn.NAME, section); + String section = encodedSections[i + 1]; + switch (sectionIds.get(i)) { + case TcfEuV2.ID: + sections.put(TcfEuV2.NAME, new TcfEuV2(section)); + break; + case TcfCaV1.ID: + sections.put(TcfCaV1.NAME, new TcfCaV1(section)); + break; + case UspV1.ID: + sections.put(UspV1.NAME, new UspV1(section)); + break; + case UsCa.ID: + sections.put(UsCa.NAME, new UsCa(section)); + break; + case UsNat.ID: + sections.put(UsNat.NAME, new UsNat(section)); + break; + case UsVa.ID: + sections.put(UsVa.NAME, new UsVa(section)); + break; + case UsCo.ID: + sections.put(UsCo.NAME, new UsCo(section)); + break; + case UsUt.ID: + sections.put(UsUt.NAME, new UsUt(section)); + break; + case UsCt.ID: + sections.put(UsCt.NAME, new UsCt(section)); + break; + case UsFl.ID: + sections.put(UsFl.NAME, new UsFl(section)); + break; + case UsMt.ID: + sections.put(UsMt.NAME, new UsMt(section)); + break; + case UsOr.ID: + sections.put(UsOr.NAME, new UsOr(section)); + break; + case UsTx.ID: + sections.put(UsTx.NAME, new UsTx(section)); + break; } } } @@ -460,8 +431,9 @@ public String encodeSection(String sectionName) { this.decoded = true; } - if (this.sections.containsKey(sectionName)) { - return this.sections.get(sectionName).encode(); + EncodableSection section = this.sections.get(sectionName); + if (section != null) { + return section.encode(); } else { return null; } @@ -477,70 +449,8 @@ public void decodeSection(String sectionName, String encodedString) { this.dirty = false; this.decoded = true; } - - EncodableSection section = null; - if (!this.sections.containsKey(sectionName)) { - if (sectionName.equals(TcfEuV2.NAME)) { - section = new TcfEuV2(); - this.sections.put(TcfEuV2.NAME, section); - } else if (sectionName.equals(TcfCaV1.NAME)) { - section = new TcfCaV1(); - this.sections.put(TcfCaV1.NAME, section); - } else if (sectionName.equals(UspV1.NAME)) { - section = new UspV1(); - this.sections.put(UspV1.NAME, section); - } else if (sectionName.equals(UsNat.NAME)) { - section = new UsNat(); - this.sections.put(UsNat.NAME, section); - } else if (sectionName.equals(UsCa.NAME)) { - section = new UsCa(); - this.sections.put(UsCa.NAME, section); - } else if (sectionName.equals(UsVa.NAME)) { - section = new UsVa(); - this.sections.put(UsVa.NAME, section); - } else if (sectionName.equals(UsCo.NAME)) { - section = new UsCo(); - this.sections.put(UsCo.NAME, section); - } else if (sectionName.equals(UsUt.NAME)) { - section = new UsUt(); - this.sections.put(UsUt.NAME, section); - } else if (sectionName.equals(UsCt.NAME)) { - section = new UsCt(); - this.sections.put(UsCt.NAME, section); - } else if (sectionName.equals(UsFl.NAME)) { - section = new UsFl(); - this.sections.put(UsFl.NAME, section); - } else if (sectionName.equals(UsMt.NAME)) { - section = new UsMt(); - this.sections.put(UsMt.NAME, section); - } else if (sectionName.equals(UsOr.NAME)) { - section = new UsOr(); - this.sections.put(UsOr.NAME, section); - } else if (sectionName.equals(UsTx.NAME)) { - section = new UsTx(); - this.sections.put(UsTx.NAME, section); - }else if (sectionName.equals(UsDe.NAME)) { - section = new UsDe(); - this.sections.put(UsDe.NAME, section); - }else if (sectionName.equals(UsIa.NAME)) { - section = new UsIa(); - this.sections.put(UsIa.NAME, section); - }else if (sectionName.equals(UsNe.NAME)) { - section = new UsNe(); - this.sections.put(UsNe.NAME, section); - }else if (sectionName.equals(UsNh.NAME)) { - section = new UsNh(); - this.sections.put(UsNh.NAME, section); - }else if (sectionName.equals(UsNj.NAME)) { - section = new UsNj(); - this.sections.put(UsNj.NAME, section); - }else if (sectionName.equals(UsTn.NAME)) { - section = new UsTn(); - this.sections.put(UsTn.NAME, section); - } - } else { - section = this.sections.get(sectionName); - } + + EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.decode(encodedString); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index a5434073..af0b2144 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.base64; -import java.util.Map; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.Stream; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -12,68 +10,55 @@ public abstract class AbstractBase64UrlEncoder { abstract protected String pad(String bitString); + private static final int BASE64_BITS = 6; /** * Base 64 URL character set. Different from standard Base64 char set in that '+' and '/' are * replaced with '-' and '_'. */ - private static String DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; - // prettier-ignore - private static Map REVERSE_DICT = Stream - .of(new Object[][] {{'A', 0}, {'B', 1}, {'C', 2}, {'D', 3}, {'E', 4}, {'F', 5}, {'G', 6}, {'H', 7}, {'I', 8}, - {'J', 9}, {'K', 10}, {'L', 11}, {'M', 12}, {'N', 13}, {'O', 14}, {'P', 15}, {'Q', 16}, {'R', 17}, {'S', 18}, - {'T', 19}, {'U', 20}, {'V', 21}, {'W', 22}, {'X', 23}, {'Y', 24}, {'Z', 25}, {'a', 26}, {'b', 27}, {'c', 28}, - {'d', 29}, {'e', 30}, {'f', 31}, {'g', 32}, {'h', 33}, {'i', 34}, {'j', 35}, {'k', 36}, {'l', 37}, {'m', 38}, - {'n', 39}, {'o', 40}, {'p', 41}, {'q', 42}, {'r', 43}, {'s', 44}, {'t', 45}, {'u', 46}, {'v', 47}, {'w', 48}, - {'x', 49}, {'y', 50}, {'z', 51}, {'0', 52}, {'1', 53}, {'2', 54}, {'3', 55}, {'4', 56}, {'5', 57}, {'6', 58}, - {'7', 59}, {'8', 60}, {'9', 61}, {'-', 62}, {'_', 63}}) - .collect(Collectors.toMap(data -> (Character) data[0], data -> (Integer) data[1])); - - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); - private static Pattern BASE64URL_VERIFICATION_PATTERN = - Pattern.compile("^[A-Za-z0-9\\-_]*$", Pattern.CASE_INSENSITIVE); - - public String encode(String bitString) { - // should only be 0 or 1 - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches()) { - throw new EncodingException("Unencodable Base64Url '" + bitString + "'"); + private static final String DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + private static final int REVERSE_DICT_SIZE = 128; + private static final BitString[] REVERSE_DICT = new BitString[REVERSE_DICT_SIZE]; + static { + for (int i = 0; i < DICT.length(); i++) { + REVERSE_DICT[DICT.charAt(i)] = BitString.of(FixedIntegerEncoder.encode(i, 6)); } + } + public String encode(String bitString) { bitString = pad(bitString); - String str = ""; + int length = bitString.length(); + StringBuilder str = new StringBuilder(length / BASE64_BITS); int index = 0; - while (index <= bitString.length() - 6) { - String s = bitString.substring(index, index + 6); - + while (index <= length - BASE64_BITS) { try { - int n = FixedIntegerEncoder.decode(s); - Character c = AbstractBase64UrlEncoder.DICT.charAt(n); - str += c; - index += 6; + int n = FixedIntegerEncoder.decode(bitString, index, BASE64_BITS); + str.append(DICT.charAt(n)); + index += BASE64_BITS; } catch (DecodingException e) { throw new EncodingException("Unencodable Base64Url '" + bitString + "'"); } } - return str; + return str.toString(); } - public String decode(String str) { - // should contain only characters from the base64url set - if (!BASE64URL_VERIFICATION_PATTERN.matcher(str).matches()) { - throw new DecodingException("Undecodable Base64URL string"); - } - - String bitString = ""; - - for (int i = 0; i < str.length(); i++) { + public BitString decode(String str) { + int length = str.length(); + BitStringBuilder sb = new BitStringBuilder(length * BASE64_BITS); + for (int i = 0; i < length; i++) { char c = str.charAt(i); - Integer n = AbstractBase64UrlEncoder.REVERSE_DICT.get(c); - String s = FixedIntegerEncoder.encode(n, 6); - bitString += s; - } + BitString n = null; + if (c < REVERSE_DICT_SIZE) { + n = REVERSE_DICT[c]; + } + if (n == null) { + throw new DecodingException("Undecodable Base64URL string"); + } + sb.append(n); - return bitString; + } + return sb.build(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index 4ebd7be7..c9e71341 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -4,7 +4,7 @@ public class CompressedBase64UrlEncoder extends AbstractBase64UrlEncoder { - private static CompressedBase64UrlEncoder instance = new CompressedBase64UrlEncoder(); + private static final CompressedBase64UrlEncoder instance = new CompressedBase64UrlEncoder(); private CompressedBase64UrlEncoder() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index 78ffe719..e2d732de 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -4,7 +4,7 @@ public class TraditionalBase64UrlEncoder extends AbstractBase64UrlEncoder { - private static TraditionalBase64UrlEncoder instance = new TraditionalBase64UrlEncoder(); + private static final TraditionalBase64UrlEncoder instance = new TraditionalBase64UrlEncoder(); private TraditionalBase64UrlEncoder() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java new file mode 100644 index 00000000..4f90c50d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -0,0 +1,135 @@ +package com.iab.gpp.encoder.bitstring; + +import java.util.AbstractList; +import java.util.BitSet; + +import com.iab.gpp.encoder.error.DecodingException; + +public final class BitString extends AbstractList { + public static final char TRUE = '1'; + public static final char FALSE = '0'; + public static final String TRUE_STRING = new String(new char[] {TRUE}); + public static final String FALSE_STRING = new String(new char[] {FALSE}); + + private final BitSet bitSet; + private final int from; + private final int to; + + BitString(BitSet bitSet, int from, int to) { + this.bitSet = bitSet; + this.from = from; + this.to = to; + } + + public static final BitString empty(int size) { + return new BitString(new BitSet(size), 0, size); + } + + public static final BitString of(String str) { + int length = str.length(); + BitStringBuilder builder = new BitStringBuilder(length); + for (int i = 0; i < length; i++) { + char c = str.charAt(i); + if (c == TRUE) { + builder.append(true); + } else if (c == FALSE) { + builder.append(false); + } else { + throw new DecodingException("Invalid bit string"); + } + } + return builder.build(); + } + + public String toString() { + StringBuilder sb = new StringBuilder(length()); + for (int i = from; i < to; i++) { + sb.append(bitSet.get(i) ? TRUE : FALSE); + } + return sb.toString(); + } + + /** + * This is the fast getter without boxing + * @param i index + * @return the value at that index + */ + public boolean getValue(int i) { + return bitSet.get(from + i); + } + + @Override + public Boolean get(int i) { + return getValue(i); + } + + @Override + public Boolean set(int index, Boolean element) { + Boolean old = get(index); + bitSet.set(from + index, element); + return old; + } + + public int length() { + return to - from; + } + + @Override + public int size() { + return length(); + } + + public BitString substring(int i) { + return substring(i, length()); + } + + public BitString substring(int newFrom, int newTo) { + int length = length(); + if (newFrom > newTo || newFrom < 0 || newFrom > length || newTo > length) { + throw new IllegalArgumentException("Invalid substring"); + } + int oldFrom = this.from; + return new BitString(bitSet, oldFrom + newFrom, oldFrom + newTo); + } + + public int indexOf(String string) { + return indexOf(string, 0); + } + + public int indexOf(String string, int startIndex) { + int stringLength = string.length(); + for (int i = startIndex, to = this.to; i < to; i++) { + int match = 0; + for (int j = 0; j < stringLength; j++) { + if ((string.charAt(j) == TRUE) == bitSet.get(from + i + j)) { + match++; + } + } + if (match == stringLength) { + return i; + } + } + return -1; + } + + public boolean isEmpty() { + return length() == 0; + } + + public BitString expandTo(int target) { + int needed = target - length(); + if (needed == 0) { + return this; + } + if (needed < 0) { + return substring(0, target); + } + BitStringBuilder sb = new BitStringBuilder(target); + sb.append(this); + for (int i = 0; i < needed; i++) { + sb.append(false); + } + return sb.build(); + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java new file mode 100644 index 00000000..df493d26 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java @@ -0,0 +1,34 @@ +package com.iab.gpp.encoder.bitstring; + +import java.util.BitSet; + +public final class BitStringBuilder { + private final BitSet bitSet; + private int length; + + public BitStringBuilder(int initialCapacity) { + this.bitSet = new BitSet(initialCapacity); + } + + public BitStringBuilder() { + this.bitSet = new BitSet(); + } + + public BitString build() { + return new BitString(bitSet, 0, length); + } + + public void append(boolean value) { + int idx = length++; + if (value) { + bitSet.set(idx); + } + } + + public void append(BitString other) { + int length = other.length(); + for (int i = 0; i < length; i++) { + append(other.getValue(i)); + } + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java index 12bcb182..011456d2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java @@ -9,7 +9,7 @@ public class BitStringEncoder { - private static BitStringEncoder instance = new BitStringEncoder(); + private static final BitStringEncoder instance = new BitStringEncoder(); private BitStringEncoder() { @@ -20,28 +20,28 @@ public static BitStringEncoder getInstance() { } public String encode(EncodableBitStringFields fields, List fieldNames) { - String bitString = ""; + StringBuilder bitString = new StringBuilder(); for (int i = 0; i < fieldNames.size(); i++) { String fieldName = fieldNames.get(i); - if (fields.containsKey(fieldName)) { - AbstractEncodableBitStringDataType field = fields.get(fieldName); - bitString += field.encode(); + AbstractEncodableBitStringDataType field = fields.get(fieldName); + if (field != null) { + bitString.append(field.encode()); } else { throw new EncodingException("Field not found: '" + fieldName + "'"); } } - return bitString; + return bitString.toString(); } - public void decode(String bitString, List fieldNames, EncodableBitStringFields fields) { + public void decode(BitString bitString, List fieldNames, EncodableBitStringFields fields) { int index = 0; for (int i = 0; i < fieldNames.size(); i++) { String fieldName = fieldNames.get(i); - if (fields.containsKey(fieldName)) { - AbstractEncodableBitStringDataType field = fields.get(fieldName); + AbstractEncodableBitStringDataType field = fields.get(fieldName); + if (field != null) { try { - String substring = field.substring(bitString, index); + BitString substring = field.substring(bitString, index); field.decode(substring); index += substring.length(); } catch (SubstringException e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 07d9588c..e3db9439 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -3,6 +3,8 @@ import java.util.Collection; import java.util.function.Predicate; import java.util.stream.Collectors; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; public abstract class AbstractEncodableBitStringDataType implements EncodableDataType { @@ -50,8 +52,8 @@ public boolean getHardFailIfMissing() { public abstract String encode(); - public abstract void decode(String bitString); + public abstract void decode(BitString bitString); - public abstract String substring(String bitString, int fromIndex) throws SubstringException; + public abstract BitString substring(BitString bitString, int fromIndex) throws SubstringException; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 699e0d26..3902104b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -2,6 +2,9 @@ import java.util.ArrayList; import java.util.List; + +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; @@ -36,7 +39,7 @@ public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStr public String encode() { try { List entries = this.value; - + StringBuilder sb = new StringBuilder(); sb.append(FixedIntegerEncoder.encode(entries.size(), 12)); for (RangeEntry entry : entries) { @@ -44,7 +47,7 @@ public String encode() { .append(FixedIntegerEncoder.encode(entry.getType(), typeBitStringLength)) .append(FixedIntegerRangeEncoder.encode(entry.getIds())); } - + return sb.toString(); } catch (Exception e) { throw new EncodingException(e); @@ -52,26 +55,25 @@ public String encode() { } @Override - public void decode(String bitString) { + public void decode(BitString bitString) { try { - List entries = new ArrayList<>(); - - int size = FixedIntegerEncoder.decode(bitString.substring(0, 12)); + int size = FixedIntegerEncoder.decode(bitString, 0, 12); + List entries = new ArrayList<>(size); int index = 12; for (int i = 0; i < size; i++) { - int key = FixedIntegerEncoder.decode(bitString.substring(index, index + keyBitStringLength)); + int key = FixedIntegerEncoder.decode(bitString, index, keyBitStringLength); index += keyBitStringLength; - - int type = FixedIntegerEncoder.decode(bitString.substring(index, index + typeBitStringLength)); + + int type = FixedIntegerEncoder.decode(bitString, index, typeBitStringLength); index += typeBitStringLength; - - String substring = new EncodableFixedIntegerRange().substring(bitString, index); + + BitString substring = new EncodableFixedIntegerRange().substring(bitString, index); List ids = FixedIntegerRangeEncoder.decode(substring); index += substring.length(); - + entries.add(new RangeEntry(key, type, ids)); } - + this.value = entries; } catch (Exception e) { throw new DecodingException(e); @@ -79,29 +81,30 @@ public void decode(String bitString) { } @Override - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { - StringBuilder sb = new StringBuilder(); - sb.append(bitString.substring(fromIndex, fromIndex + 12)); - - int size = FixedIntegerEncoder.decode(sb.toString()); - - int index = fromIndex + sb.length(); + BitStringBuilder sb = new BitStringBuilder(); + BitString lengthString = bitString.substring(fromIndex, fromIndex + 12); + sb.append(lengthString); + + int size = FixedIntegerEncoder.decode(lengthString); + + int index = fromIndex + lengthString.length(); for (int i = 0; i < size; i++) { - String keySubstring = bitString.substring(index, index + keyBitStringLength); + BitString keySubstring = bitString.substring(index, index + keyBitStringLength); index += keySubstring.length(); sb.append(keySubstring); - - String typeSubstring = bitString.substring(index, index + typeBitStringLength); + + BitString typeSubstring = bitString.substring(index, index + typeBitStringLength); index += typeSubstring.length(); sb.append(typeSubstring); - - String rangeSubstring = new EncodableFixedIntegerRange().substring(bitString, index); + + BitString rangeSubstring = new EncodableFixedIntegerRange().substring(bitString, index); index += rangeSubstring.length(); sb.append(rangeSubstring); } - - return sb.toString(); + + return sb.build(); } catch (Exception e) { throw new SubstringException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 340be3ab..368808cc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,7 +29,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = BooleanEncoder.decode(bitString); } catch (Exception e) { @@ -36,7 +37,7 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { return bitString.substring(fromIndex, fromIndex + 1); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java index 94d416a6..0a407510 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java @@ -1,7 +1,9 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.bitstring.BitString; + public interface EncodableDataType extends DataType { String encode(); - void decode(String str); + void decode(BitString str); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index a96c46f4..fe37e3b2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -1,6 +1,8 @@ package com.iab.gpp.encoder.datatype; import java.time.ZonedDateTime; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -29,7 +31,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = DatetimeEncoder.decode(bitString); } catch (Exception e) { @@ -37,7 +39,7 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { return bitString.substring(fromIndex, fromIndex + 36); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 3da64a15..0926402e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,7 +29,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = FibonacciIntegerEncoder.decode(bitString); } catch (Exception e) { @@ -36,7 +37,7 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { int index = bitString.indexOf("11", fromIndex); if (index > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 53ab2eb2..8ae29eac 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.List; import java.util.TreeSet; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; @@ -23,7 +25,7 @@ public EncodableFibonacciIntegerRange(List value, boolean hardFailIfMis super(hardFailIfMissing); setValue(value); } - + public String encode() { try { return FibonacciIntegerRangeEncoder.encode(this.value); @@ -32,7 +34,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = FibonacciIntegerRangeEncoder.decode(bitString); } catch (Exception e) { @@ -40,12 +42,12 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { int count = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 12)); int index = fromIndex + 12; for (int i = 0; i < count; i++) { - if (bitString.charAt(index) == '1') { + if (bitString.getValue(index)) { index = bitString.indexOf("11", bitString.indexOf("11", index + 1) + 2) + 2; } else { index = bitString.indexOf("11", index + 1) + 2; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 5e6890d9..1411d9d9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.List; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -10,9 +12,10 @@ public class EncodableFixedBitfield extends AbstractEncodableBitStringDataType value) { - super(true); - this.numElements = value.size(); - setValue(value); - } - public EncodableFixedBitfield(List value, boolean hardFailIfMissing) { super(hardFailIfMissing); this.numElements = value.size(); @@ -40,7 +37,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = FixedBitfieldEncoder.decode(bitString); } catch (Exception e) { @@ -48,7 +45,7 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { return bitString.substring(fromIndex, fromIndex + this.numElements); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 9fd25fb0..44cedea7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -33,7 +34,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = FixedIntegerEncoder.decode(bitString); } catch (Exception e) { @@ -41,7 +42,7 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { return bitString.substring(fromIndex, fromIndex + this.bitStringLength); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index f491e5ee..14ed4ebc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.List; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -39,7 +41,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = FixedIntegerListEncoder.decode(bitString, this.elementBitStringLength, this.numElements); } catch (Exception e) { @@ -47,7 +49,7 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { return bitString.substring(fromIndex, fromIndex + (this.elementBitStringLength * numElements)); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 7fdbd5a8..c4e51491 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.List; import java.util.TreeSet; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; @@ -32,7 +34,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = FixedIntegerRangeEncoder.decode(bitString); } catch (Exception e) { @@ -40,12 +42,12 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { int count = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 12)); int index = fromIndex + 12; for (int i = 0; i < count; i++) { - if (bitString.charAt(index) == '1') { + if (bitString.getValue(index)) { index += 33; } else { index += 17; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 4cea9b48..83fc58f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -33,7 +34,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = FixedStringEncoder.decode(bitString); } catch (Exception e) { @@ -41,7 +42,7 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { return bitString.substring(fromIndex, fromIndex + this.stringLength * 6); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index cb1a0991..80967eff 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.List; import java.util.function.IntSupplier; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -36,7 +38,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = FixedBitfieldEncoder.decode(bitString); } catch (Exception e) { @@ -44,7 +46,7 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { return bitString.substring(fromIndex, fromIndex + this.getLengthSupplier.getAsInt()); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java index 2e49855f..a19f488d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java @@ -3,6 +3,9 @@ import java.util.ArrayList; import java.util.List; import java.util.TreeSet; + +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.OptimizedFibonacciRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; @@ -32,7 +35,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = OptimizedFibonacciRangeEncoder.decode(bitString); } catch (Exception e) { @@ -40,12 +43,14 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { int max = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 16)); - if (bitString.charAt(fromIndex + 16) == '1') { - return (bitString.substring(fromIndex, fromIndex + 17) - + new EncodableFibonacciIntegerRange().substring(bitString, fromIndex + 17)); + if (bitString.getValue(fromIndex + 16)) { + BitStringBuilder out = new BitStringBuilder(); + out.append(bitString.substring(fromIndex, fromIndex + 17)); + out.append(new EncodableFibonacciIntegerRange().substring(bitString, fromIndex + 17)); + return out.build(); } else { return bitString.substring(fromIndex, fromIndex + 17 + max); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 57f4b8e9..10848072 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -3,6 +3,9 @@ import java.util.ArrayList; import java.util.List; import java.util.TreeSet; + +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; @@ -33,7 +36,7 @@ public String encode() { } } - public void decode(String bitString) { + public void decode(BitString bitString) { try { this.value = OptimizedFixedRangeEncoder.decode(bitString); } catch (Exception e) { @@ -41,12 +44,14 @@ public void decode(String bitString) { } } - public String substring(String bitString, int fromIndex) throws SubstringException { + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { int max = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 16)); - if (bitString.charAt(fromIndex + 16) == '1') { - return bitString.substring(fromIndex, fromIndex + 17) - + new EncodableFixedIntegerRange().substring(bitString, fromIndex + 17); + if (bitString.getValue(fromIndex + 16)) { + BitStringBuilder out = new BitStringBuilder(); + out.append(bitString.substring(fromIndex, fromIndex + 17)); + out.append(new EncodableFixedIntegerRange().substring(bitString, fromIndex + 17)); + return out.build(); } else { return bitString.substring(fromIndex, fromIndex + 17 + max); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ArrayOfRangesEntryEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ArrayOfRangesEntryEncoder.java index de1449b3..cc7a19b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ArrayOfRangesEntryEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ArrayOfRangesEntryEncoder.java @@ -1,39 +1,35 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.regex.Pattern; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class ArrayOfRangesEntryEncoder { - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); public static String encode(long value, int bitStringLength) { String bitString = ""; while (value > 0) { if ((value & 1) == 1) { - bitString = "1" + bitString; + bitString = BitString.TRUE_STRING + bitString; } else { - bitString = "0" + bitString; + bitString = BitString.FALSE_STRING + bitString; } value = value >> 1; } while (bitString.length() < bitStringLength) { - bitString = "0" + bitString; + bitString = BitString.FALSE_STRING + bitString; } return bitString; } - public static long decode(String bitString) throws DecodingException { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches()) { - throw new DecodingException("Undecodable FixedLong '" + bitString + "'"); - } - + public static long decode(BitString bitString) throws DecodingException { long value = 0; - for (int i = 0; i < bitString.length(); i++) { - if (bitString.charAt(bitString.length() - (i + 1)) == '1') { + int length = bitString.length(); + for (int i = 0; i < length; i++) { + if (bitString.getValue(length - (i + 1))) { value += 1L << i; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java index 20e6cbd0..8d931de2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java @@ -1,26 +1,28 @@ package com.iab.gpp.encoder.datatype.encoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class BooleanEncoder { public static String encode(Boolean value) { if (value == true) { - return "1"; + return BitString.TRUE_STRING; } else if (value == false) { - return "0"; + return BitString.FALSE_STRING; } else { throw new EncodingException("Unencodable Boolean '" + value + "'"); } } - public static boolean decode(String bitString) { - if (bitString.equals("1")) { - return true; - } else if (bitString.equals("0")) { - return false; - } else { + public static boolean decode(BitString bitString) { + return decode(bitString, 0, bitString.length()); + } + + public static boolean decode(BitString bitString, int fromIndex, int length) { + if (length != 1) { throw new DecodingException("Undecodable Boolean '" + bitString + "'"); } + return bitString.getValue(fromIndex); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index 77f6f344..a0a821e1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -3,11 +3,13 @@ import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; -import java.util.regex.Pattern; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoder { - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); + + public static final ZoneId UTC = ZoneId.of("UTC"); public static String encode(ZonedDateTime value) { if (value != null) { @@ -17,11 +19,11 @@ public static String encode(ZonedDateTime value) { } } - public static ZonedDateTime decode(String bitString) throws DecodingException { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches() || bitString.length() != 36) { + public static ZonedDateTime decode(BitString bitString) throws DecodingException { + if (bitString.length() != 36) { throw new DecodingException("Undecodable Datetime '" + bitString + "'"); } - return ZonedDateTime.ofInstant(Instant.ofEpochMilli(FixedLongEncoder.decode(bitString) * 100L), ZoneId.of("UTC")); + return ZonedDateTime.ofInstant(Instant.ofEpochMilli(FixedLongEncoder.decode(bitString) * 100L), UTC); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 281b27da..d6e8d5ae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -2,11 +2,11 @@ import java.util.ArrayList; import java.util.List; -import java.util.regex.Pattern; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerEncoder { - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); public static String encode(int value) { List fib = new ArrayList(); @@ -24,35 +24,35 @@ public static String encode(int value) { } } - String bitString = "1"; + String bitString = BitString.TRUE_STRING; for (int i = fib.size() - 1; i >= 0; i--) { int f = fib.get(i); if (value >= f) { - bitString = "1" + bitString; + bitString = BitString.TRUE_STRING + bitString; value -= f; } else { - bitString = "0" + bitString; + bitString = BitString.FALSE_STRING + bitString; } } return bitString; } - public static int decode(String bitString) throws DecodingException { + public static int decode(BitString bitString) throws DecodingException { + int length = bitString.length(); // enforce a length restriction to avoid overflows // 2^16 has a bit string length of 24 - if (bitString.length() > 24) { + if (length > 24) { throw new DecodingException("FibonacciInteger too long"); } - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches() || bitString.length() < 2 - || bitString.indexOf("11") != bitString.length() - 2) { + if (length < 2 || bitString.indexOf("11") != length - 2) { throw new DecodingException("Undecodable FibonacciInteger '" + bitString + "'"); } int value = 0; - List fib = new ArrayList<>(); - for (int i = 0; i < bitString.length() - 1; i++) { + List fib = new ArrayList<>(length); + for (int i = 0; i < length - 1; i++) { if (i == 0) { fib.add(1); } else if (i == 1) { @@ -62,8 +62,8 @@ public static int decode(String bitString) throws DecodingException { } } - for (int i = 0; i < bitString.length() - 1; i++) { - if (bitString.charAt(i) == '1') { + for (int i = 0; i < length - 1; i++) { + if (bitString.getValue(i)) { value += fib.get(i); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index daafa795..fa2b0920 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -3,18 +3,12 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.logging.Logger; -import java.util.regex.Pattern; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { - private static final Logger LOGGER = Logger.getLogger(FibonacciIntegerRangeEncoder.class.getName()); - // NOTE: This is a value roughly the 2x the size of this list - // https://tools.iabtechlab.com/transparencycenter/explorer/business/gpp - static final int MAX_SIZE = 8192; - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); - public static String encode(List value) { Collections.sort(value); @@ -33,35 +27,35 @@ public static String encode(List value) { groupStartIndex = groupEndIndex + 1; } - String bitString = FixedIntegerEncoder.encode(groups.size(), 12); + StringBuilder bitString = new StringBuilder(FixedIntegerEncoder.encode(groups.size(), 12)); for (int i = 0; i < groups.size(); i++) { if (groups.get(i).size() == 1) { int v = groups.get(i).get(0) - offset; offset = groups.get(i).get(0); - bitString += "0" + FibonacciIntegerEncoder.encode(v); + bitString.append(BitString.FALSE).append(FibonacciIntegerEncoder.encode(v)); } else { int startVal = groups.get(i).get(0) - offset; offset = groups.get(i).get(0); int endVal = groups.get(i).get(groups.get(i).size() - 1) - offset; offset = groups.get(i).get(groups.get(i).size() - 1); - bitString += "1" + FibonacciIntegerEncoder.encode(startVal) + FibonacciIntegerEncoder.encode(endVal); + bitString.append(BitString.TRUE).append(FibonacciIntegerEncoder.encode(startVal)).append(FibonacciIntegerEncoder.encode(endVal)); } } - return bitString; + return bitString.toString(); } - public static List decode(String bitString) throws DecodingException { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches() || bitString.length() < 12) { + public static List decode(BitString bitString) throws DecodingException { + if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } - List value = new ArrayList<>(); - int count = FixedIntegerEncoder.decode(bitString.substring(0, 12)); + int count = FixedIntegerEncoder.decode(bitString, 0, 12); + List value = new ArrayList<>(count); int offset = 0; int startIndex = 12; for (int i = 0; i < count; i++) { - boolean group = BooleanEncoder.decode(bitString.substring(startIndex, startIndex + 1)); + boolean group = BooleanEncoder.decode(bitString, startIndex, 1); startIndex++; if (group == true) { @@ -80,17 +74,13 @@ public static List decode(String bitString) throws DecodingException { break; } for (int j = start; j <= end; j++) { - value.add(j); + value.add(IntegerCache.valueOf(j)); } } else { int index = bitString.indexOf("11", startIndex); int val = FibonacciIntegerEncoder.decode(bitString.substring(startIndex, index + 2)) + offset; offset = val; - if (value.size() == MAX_SIZE) { - LOGGER.warning("FibonacciIntegerRange has too many values"); - break; - } - value.add(val); + value.add(IntegerCache.valueOf(val)); startIndex = index + 2; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 6c922263..d04578d4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -1,41 +1,31 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.ArrayList; import java.util.List; -import java.util.regex.Pattern; -import com.iab.gpp.encoder.error.DecodingException; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.EncodingException; public class FixedBitfieldEncoder { - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); - public static String encode(List value, int bitStringLength) { - if (value.size() > bitStringLength) { - throw new EncodingException("Too many values '" + value.size() + "'"); + int length = value.size(); + if (length > bitStringLength) { + throw new EncodingException("Too many values '" + length + "'"); } - String bitString = ""; - for (int i = 0; i < value.size(); i++) { - bitString += BooleanEncoder.encode(value.get(i)); + StringBuilder bitString = new StringBuilder(length); + for (int i = 0; i < bitStringLength; i++) { + if (i < length) { + bitString.append(BooleanEncoder.encode(value.get(i))); + } else { + bitString.append(BitString.FALSE); + } } - while (bitString.length() < bitStringLength) { - bitString += "0"; - } - - return bitString; + return bitString.toString(); } - public static List decode(String bitString) { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches()) { - throw new DecodingException("Undecodable FixedBitfield '" + bitString + "'"); - } - - List value = new ArrayList<>(); - for (int i = 0; i < bitString.length(); i++) { - value.add(BooleanEncoder.decode(bitString.substring(i, i + 1))); - } - return value; + public static List decode(BitString bitString) { + return bitString; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index dfc6802f..63661890 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -1,22 +1,20 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.regex.Pattern; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerEncoder { - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); - public static String encode(int value, int bitStringLength) { // let bitString = value.toString(2); String bitString = ""; while (value > 0) { if ((value & 1) == 1) { - bitString = "1" + bitString; + bitString = BitString.TRUE_STRING + bitString; } else { - bitString = "0" + bitString; + bitString = BitString.FALSE_STRING + bitString; } value = value >> 1; } @@ -25,23 +23,39 @@ public static String encode(int value, int bitStringLength) { throw new EncodingException( "Numeric value '" + value + "' is too large for a bit string length of '" + bitStringLength + "'"); } - + while (bitString.length() < bitStringLength) { - bitString = "0" + bitString; + bitString = BitString.FALSE_STRING + bitString; } return bitString; } - public static int decode(String bitString) throws DecodingException { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches()) { - throw new DecodingException("Undecodable FixedInteger '" + bitString + "'"); + public static int decode(BitString bitString) throws DecodingException { + return decode(bitString, 0, bitString.length()); + } + + public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { + int value = 0; + + for (int i = 0; i < length; i++) { + if (bitString.getValue(fromIndex + length - (i + 1))) { + value += 1 << i; + } } + + return value; + } + + public static int decode(String bitString, int fromIndex, int length) throws DecodingException { int value = 0; - for (int i = 0; i < bitString.length(); i++) { - if (bitString.charAt(bitString.length() - (i + 1)) == '1') { + for (int i = 0; i < length; i++) { + char c = bitString.charAt(fromIndex + length - (i + 1)); + if (c == BitString.TRUE) { value += 1 << i; + } else if (c != BitString.FALSE) { + throw new DecodingException("Unencodable Base64Url '" + bitString + "'"); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 044dfe26..697ba1e0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -2,56 +2,52 @@ import java.util.ArrayList; import java.util.List; -import java.util.regex.Pattern; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerListEncoder { - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); - public static String encode(List value, int elementBitStringLength, int numElements) { - if(value.size() > numElements) { + int length = value.size(); + if (length > numElements) { throw new EncodingException("Too many values '" + value.size() + "'"); } - - String bitString = ""; - for (int i = 0; i < value.size(); i++) { - bitString += FixedIntegerEncoder.encode(value.get(i), elementBitStringLength); - } - while (bitString.length() < elementBitStringLength * numElements) { - bitString += "0"; + int expectedLength = elementBitStringLength * numElements; + + StringBuilder bitString = new StringBuilder(expectedLength); + for (int i = 0; i < numElements; i++) { + if (i < length) { + bitString.append(FixedIntegerEncoder.encode(value.get(i), elementBitStringLength)); + } else { + for (int j = 0; j < elementBitStringLength; j++) { + bitString.append(BitString.FALSE); + } + } } - return bitString; + return bitString.toString(); } - public static List decode(String bitString, int elementBitStringLength, int numElements) + public static List decode(BitString bitString, int elementBitStringLength, int numElements) throws DecodingException { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches()) { - throw new DecodingException("Undecodable FixedIntegerList '" + bitString + "'"); - } - - if (bitString.length() > elementBitStringLength * numElements) { + int length = bitString.length(); + if (length > elementBitStringLength * numElements) { throw new DecodingException("Undecodable FixedIntegerList '" + bitString + "'"); } - if (bitString.length() % elementBitStringLength != 0) { + if (length % elementBitStringLength != 0) { throw new DecodingException("Undecodable FixedIntegerList '" + bitString + "'"); } - while (bitString.length() < elementBitStringLength * numElements) { - bitString += "0"; - } - - if (bitString.length() > elementBitStringLength * numElements) { - bitString = bitString.substring(0, elementBitStringLength * numElements); - } + bitString = bitString.expandTo(elementBitStringLength * numElements); - List value = new ArrayList<>(); - for (int i = 0; i < bitString.length(); i += elementBitStringLength) { - value.add(FixedIntegerEncoder.decode(bitString.substring(i, i + elementBitStringLength))); + List value = new ArrayList<>(numElements); + length = bitString.length(); + for (int i = 0; i < length; i += elementBitStringLength) { + value.add(IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength))); } while (value.size() < numElements) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 335952bf..9edec946 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -3,18 +3,12 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.logging.Logger; -import java.util.regex.Pattern; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { - private static final Logger LOGGER = Logger.getLogger(FixedIntegerRangeEncoder.class.getName()); - // NOTE: This is a value roughly the 2x the size of this list - // https://tools.iabtechlab.com/transparencycenter/explorer/business/gpp - private static final int MAX_SIZE = 8192; - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); - public static String encode(List value) { Collections.sort(value); @@ -32,35 +26,35 @@ public static String encode(List value) { groupStartIndex = groupEndIndex + 1; } - String bitString = FixedIntegerEncoder.encode(groups.size(), 12); + StringBuilder bitString = new StringBuilder(FixedIntegerEncoder.encode(groups.size(), 12)); for (int i = 0; i < groups.size(); i++) { if (groups.get(i).size() == 1) { - bitString += "0" + FixedIntegerEncoder.encode(groups.get(i).get(0), 16); + bitString.append(BitString.FALSE).append(FixedIntegerEncoder.encode(groups.get(i).get(0), 16)); } else { - bitString += "1" + FixedIntegerEncoder.encode(groups.get(i).get(0), 16) - + FixedIntegerEncoder.encode(groups.get(i).get(groups.get(i).size() - 1), 16); + bitString.append(BitString.TRUE).append(FixedIntegerEncoder.encode(groups.get(i).get(0), 16)) + .append(FixedIntegerEncoder.encode(groups.get(i).get(groups.get(i).size() - 1), 16)); } } - return bitString; + return bitString.toString(); } - public static List decode(String bitString) throws DecodingException { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches() || bitString.length() < 12) { + public static List decode(BitString bitString) throws DecodingException { + if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } - List value = new ArrayList<>(); - int count = FixedIntegerEncoder.decode(bitString.substring(0, 12)); + int count = FixedIntegerEncoder.decode(bitString, 0, 12); + List value = new ArrayList<>(count); int startIndex = 12; for (int i = 0; i < count; i++) { - boolean group = BooleanEncoder.decode(bitString.substring(startIndex, startIndex + 1)); + boolean group = BooleanEncoder.decode(bitString, startIndex, 1); startIndex++; if (group == true) { - int start = FixedIntegerEncoder.decode(bitString.substring(startIndex, startIndex + 16)); + int start = FixedIntegerEncoder.decode(bitString, startIndex, 16); startIndex += 16; - int end = FixedIntegerEncoder.decode(bitString.substring(startIndex, startIndex + 16)); + int end = FixedIntegerEncoder.decode(bitString, startIndex, 16); startIndex += 16; if (end < start) { @@ -71,15 +65,11 @@ public static List decode(String bitString) throws DecodingException { break; } for (int j = start; j <= end; j++) { - value.add(j); + value.add(IntegerCache.valueOf(j)); } } else { - int val = FixedIntegerEncoder.decode(bitString.substring(startIndex, startIndex + 16)); - if (value.size() == MAX_SIZE) { - LOGGER.warning("FixedIntegerRange has too many values"); - break; - } - value.add(val); + int val = FixedIntegerEncoder.decode(bitString, startIndex, 16); + value.add(IntegerCache.valueOf(val)); startIndex += 16; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java index c244a601..c2d76775 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java @@ -1,20 +1,18 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.regex.Pattern; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedLongEncoder { - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); - public static String encode(long value, int bitStringLength) { String bitString = ""; while (value > 0) { if ((value & 1) == 1) { - bitString = "1" + bitString; + bitString = BitString.TRUE_STRING + bitString; } else { - bitString = "0" + bitString; + bitString = BitString.FALSE_STRING + bitString; } value = value >> 1; } @@ -25,21 +23,18 @@ public static String encode(long value, int bitStringLength) { } while (bitString.length() < bitStringLength) { - bitString = "0" + bitString; + bitString = BitString.FALSE_STRING + bitString; } return bitString; } - public static long decode(String bitString) throws DecodingException { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches()) { - throw new DecodingException("Undecodable FixedLong '" + bitString + "'"); - } - + public static long decode(BitString bitString) throws DecodingException { long value = 0; - for (int i = 0; i < bitString.length(); i++) { - if (bitString.charAt(bitString.length() - (i + 1)) == '1') { + int length = bitString.length(); + for (int i = 0; i < length; i++) { + if (bitString.getValue(length - (i + 1))) { value += 1L << i; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 38db681e..95362dd2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -1,50 +1,49 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.regex.Pattern; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedStringEncoder { - - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); + private static final char SPACE = ' '; public static String encode(String value, int stringLength) { - while (value.length() < stringLength) { - value += " "; - } - - String bitString = ""; - for (int i = 0; i < value.length(); i++) { - int code = (int) value.charAt(i); - if (code == 32) { - // space - bitString += FixedIntegerEncoder.encode(63, 6); + int length = value.length(); + StringBuilder bitString = new StringBuilder(stringLength * 6); + for (int i = 0; i < stringLength; i++) { + int code = SPACE; + if (i < length) { + code = value.charAt(i); + } + if (code == SPACE) { + bitString.append(FixedIntegerEncoder.encode(63, 6)); } else if (code >= 65) { - bitString += FixedIntegerEncoder.encode(((int) value.charAt(i)) - 65, 6); + bitString.append(FixedIntegerEncoder.encode(((int) value.charAt(i)) - 65, 6)); } else { throw new EncodingException("Unencodable FixedString '" + value + "'"); } } - return bitString; + return bitString.toString(); } - public static String decode(String bitString) { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches() || bitString.length() % 6 != 0) { + public static String decode(BitString bitString) { + int length = bitString.length(); + if (length % 6 != 0) { throw new DecodingException("Undecodable FixedString '" + bitString + "'"); } - String value = ""; + StringBuilder value = new StringBuilder(length); - for (int i = 0; i < bitString.length(); i += 6) { - int code = FixedIntegerEncoder.decode(bitString.substring(i, i + 6)); + for (int i = 0; i < length; i += 6) { + int code = FixedIntegerEncoder.decode(bitString, i, 6); if (code == 63) { - value += " "; + value.append(SPACE); } else { - value += (char) (code + 65); + value.append((char) (code + 65)); } } - return value.trim(); + return value.toString().trim(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java new file mode 100644 index 00000000..719f73e6 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java @@ -0,0 +1,20 @@ +package com.iab.gpp.encoder.datatype.encoder; + +final class IntegerCache { + // should be greater than the greatest vendor id in the global vendor list + private static final int CACHE_SIZE = 8096; + private static final Integer[] CACHE = new Integer[CACHE_SIZE]; + static { + for (int i = 0; i < CACHE_SIZE; i++) { + CACHE[i] = i; + } + } + + static Integer valueOf(int i) { + if (i >=0 && i < CACHE_SIZE) { + return CACHE[i]; + } + return i; + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index 3492fbcc..c806b40a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -2,14 +2,13 @@ import java.util.ArrayList; import java.util.List; -import java.util.regex.Pattern; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class OptimizedFibonacciRangeEncoder { - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); - public static String encode(List value) throws EncodingException { // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way // to identify in advance which will be shorter based on the array length and values @@ -19,9 +18,9 @@ public static String encode(List value) throws EncodingException { int bitFieldLength = max; if (rangeLength <= bitFieldLength) { - return FixedIntegerEncoder.encode(max, 16) + "1" + rangeBitString; + return FixedIntegerEncoder.encode(max, 16) + BitString.TRUE_STRING + rangeBitString; } else { - List bits = new ArrayList<>(); + List bits = new ArrayList<>(max); int index = 0; for (int i = 0; i < max; i++) { if (i == value.get(index) - 1) { @@ -31,23 +30,24 @@ public static String encode(List value) throws EncodingException { bits.add(false); } } - return FixedIntegerEncoder.encode(max, 16) + "0" + FixedBitfieldEncoder.encode(bits, bitFieldLength); + return FixedIntegerEncoder.encode(max, 16) + BitString.FALSE_STRING + FixedBitfieldEncoder.encode(bits, bitFieldLength); } } - public static List decode(String bitString) throws DecodingException { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches() || bitString.length() < 12) { + public static List decode(BitString bitString) throws DecodingException { + if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } - if (bitString.charAt(16) == '1') { + if (bitString.getValue(16)) { return FibonacciIntegerRangeEncoder.decode(bitString.substring(17)); } else { - List value = new ArrayList<>(); - List bits = FixedBitfieldEncoder.decode(bitString.substring(17)); - for (int i = 0; i < bits.size(); i++) { - if (bits.get(i) == true) { - value.add(i + 1); + BitString bits = bitString.substring(17); + int length = bits.length(); + List value = new ArrayList<>(length); + for (int i = 0; i < length; i++) { + if (bits.getValue(i)) { + value.add(IntegerCache.valueOf(i + 1)); } } return value; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 73fb5e68..aa84ebca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -2,14 +2,13 @@ import java.util.ArrayList; import java.util.List; -import java.util.regex.Pattern; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class OptimizedFixedRangeEncoder { - private static Pattern BITSTRING_VERIFICATION_PATTERN = Pattern.compile("^[0-1]*$", Pattern.CASE_INSENSITIVE); - public static String encode(List value) throws EncodingException { // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way // to identify in advance which will be shorter based on the array length and values @@ -19,9 +18,9 @@ public static String encode(List value) throws EncodingException { int bitFieldLength = max; if (rangeLength <= bitFieldLength) { - return FixedIntegerEncoder.encode(max, 16) + "1" + rangeBitString; + return FixedIntegerEncoder.encode(max, 16) + BitString.TRUE_STRING + rangeBitString; } else { - List bits = new ArrayList<>(); + List bits = new ArrayList<>(max); int index = 0; for (int i = 0; i < max; i++) { if (i == value.get(index) - 1) { @@ -32,23 +31,24 @@ public static String encode(List value) throws EncodingException { } } - return FixedIntegerEncoder.encode(max, 16) + "0" + FixedBitfieldEncoder.encode(bits, bitFieldLength); + return FixedIntegerEncoder.encode(max, 16) + BitString.FALSE_STRING + FixedBitfieldEncoder.encode(bits, bitFieldLength); } } - public static List decode(String bitString) throws DecodingException { - if (!BITSTRING_VERIFICATION_PATTERN.matcher(bitString).matches() || bitString.length() < 12) { + public static List decode(BitString bitString) throws DecodingException { + if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } - if (bitString.charAt(16) == '1') { + if (bitString.getValue(16)) { return FixedIntegerRangeEncoder.decode(bitString.substring(17)); } else { - List value = new ArrayList<>(); - List bits = FixedBitfieldEncoder.decode(bitString.substring(17)); - for (int i = 0; i < bits.size(); i++) { - if (bits.get(i) == true) { - value.add(i + 1); + BitString bits = bitString.substring(17); + int length = bits.length(); + List value = new ArrayList<>(length); + for (int i = 0; i < length; i++) { + if (bits.getValue(i)) { + value.add(IntegerCache.valueOf(i + 1)); } } return value; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 17f1f5d9..fcf35a10 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -5,12 +5,12 @@ public class HeaderV1Field { - public static String ID = "Id"; - public static String VERSION = "Version"; - public static String SECTION_IDS = "SectionIds"; + public static final String ID = "Id"; + public static final String VERSION = "Version"; + public static final String SECTION_IDS = "SectionIds"; //@formatter:off - public static List HEADER_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List HEADER_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index c87e886d..2ab0b31d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -5,35 +5,35 @@ public class TcfCaV1Field { - public static String VERSION = "Version"; - public static String CREATED = "Created"; - public static String LAST_UPDATED = "LastUpdated"; - public static String CMP_ID = "CmpId"; - public static String CMP_VERSION = "CmpVersion"; - public static String CONSENT_SCREEN = "ConsentScreen"; - public static String CONSENT_LANGUAGE = "ConsentLanguage"; - public static String VENDOR_LIST_VERSION = "VendorListVersion"; - public static String TCF_POLICY_VERSION = "TcfPolicyVersion"; - public static String USE_NON_STANDARD_STACKS = "UseNonStandardStacks"; - public static String SPECIAL_FEATURE_EXPRESS_CONSENT = "SpecialFeatureExpressConsent"; - public static String PURPOSES_EXPRESS_CONSENT = "PurposesExpressConsent"; - public static String PURPOSES_IMPLIED_CONSENT = "PurposesImpliedConsent"; - public static String VENDOR_EXPRESS_CONSENT = "VendorExpressConsent"; - public static String VENDOR_IMPLIED_CONSENT = "VendorImpliedConsent"; - public static String PUB_RESTRICTIONS = "PubRestrictions"; + public static final String VERSION = "Version"; + public static final String CREATED = "Created"; + public static final String LAST_UPDATED = "LastUpdated"; + public static final String CMP_ID = "CmpId"; + public static final String CMP_VERSION = "CmpVersion"; + public static final String CONSENT_SCREEN = "ConsentScreen"; + public static final String CONSENT_LANGUAGE = "ConsentLanguage"; + public static final String VENDOR_LIST_VERSION = "VendorListVersion"; + public static final String TCF_POLICY_VERSION = "TcfPolicyVersion"; + public static final String USE_NON_STANDARD_STACKS = "UseNonStandardStacks"; + public static final String SPECIAL_FEATURE_EXPRESS_CONSENT = "SpecialFeatureExpressConsent"; + public static final String PURPOSES_EXPRESS_CONSENT = "PurposesExpressConsent"; + public static final String PURPOSES_IMPLIED_CONSENT = "PurposesImpliedConsent"; + public static final String VENDOR_EXPRESS_CONSENT = "VendorExpressConsent"; + public static final String VENDOR_IMPLIED_CONSENT = "VendorImpliedConsent"; + public static final String PUB_RESTRICTIONS = "PubRestrictions"; - public static String PUB_PURPOSES_SEGMENT_TYPE = "PubPurposesSegmentType"; - public static String PUB_PURPOSES_EXPRESS_CONSENT = "PubPurposesExpressConsent"; - public static String PUB_PURPOSES_IMPLIED_CONSENT = "PubPurposesImpliedConsent"; - public static String NUM_CUSTOM_PURPOSES = "NumCustomPurposes"; - public static String CUSTOM_PURPOSES_EXPRESS_CONSENT = "CustomPurposesExpressConsent"; - public static String CUSTOM_PURPOSES_IMPLIED_CONSENT = "CustomPurposesImpliedConsent"; + public static final String PUB_PURPOSES_SEGMENT_TYPE = "PubPurposesSegmentType"; + public static final String PUB_PURPOSES_EXPRESS_CONSENT = "PubPurposesExpressConsent"; + public static final String PUB_PURPOSES_IMPLIED_CONSENT = "PubPurposesImpliedConsent"; + public static final String NUM_CUSTOM_PURPOSES = "NumCustomPurposes"; + public static final String CUSTOM_PURPOSES_EXPRESS_CONSENT = "CustomPurposesExpressConsent"; + public static final String CUSTOM_PURPOSES_IMPLIED_CONSENT = "CustomPurposesImpliedConsent"; - public static String DISCLOSED_VENDORS_SEGMENT_TYPE = "DisclosedVendorsSegmentType"; - public static String DISCLOSED_VENDORS = "DisclosedVendors"; + public static final String DISCLOSED_VENDORS_SEGMENT_TYPE = "DisclosedVendorsSegmentType"; + public static final String DISCLOSED_VENDORS = "DisclosedVendors"; //@formatter:off - public static List TCFCAV1_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List TCFCAV1_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { TcfCaV1Field.VERSION, TcfCaV1Field.CREATED, TcfCaV1Field.LAST_UPDATED, @@ -54,7 +54,7 @@ public class TcfCaV1Field { //@formatter:on //@formatter:off - public static List TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, @@ -65,7 +65,7 @@ public class TcfCaV1Field { //@formatter:on //@formatter:off - public static List TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, TcfCaV1Field.DISCLOSED_VENDORS, }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index fedb510f..83abe181 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -5,38 +5,38 @@ public class TcfEuV2Field { - public static String VERSION = "Version"; - public static String CREATED = "Created"; - public static String LAST_UPDATED = "LastUpdated"; - public static String CMP_ID = "CmpId"; - public static String CMP_VERSION = "CmpVersion"; - public static String CONSENT_SCREEN = "ConsentScreen"; - public static String CONSENT_LANGUAGE = "ConsentLanguage"; - public static String VENDOR_LIST_VERSION = "VendorListVersion"; - public static String POLICY_VERSION = "PolicyVersion"; - public static String IS_SERVICE_SPECIFIC = "IsServiceSpecific"; - public static String USE_NON_STANDARD_STACKS = "UseNonStandardStacks"; - public static String SPECIAL_FEATURE_OPTINS = "SpecialFeatureOptins"; - public static String PURPOSE_CONSENTS = "PurposeConsents"; - public static String PURPOSE_LEGITIMATE_INTERESTS = "PurposeLegitimateInterests"; - public static String PURPOSE_ONE_TREATMENT = "PurposeOneTreatment"; - public static String PUBLISHER_COUNTRY_CODE = "PublisherCountryCode"; - public static String VENDOR_CONSENTS = "VendorConsents"; - public static String VENDOR_LEGITIMATE_INTERESTS = "VendorLegitimateInterests"; - public static String PUBLISHER_RESTRICTIONS = "PublisherRestrictions"; - public static String PUBLISHER_PURPOSES_SEGMENT_TYPE = "PublisherPurposesSegmentType"; - public static String PUBLISHER_CONSENTS = "PublisherConsents"; - public static String PUBLISHER_LEGITIMATE_INTERESTS = "PublisherLegitimateInterests"; - public static String NUM_CUSTOM_PURPOSES = "NumCustomPurposes"; - public static String PUBLISHER_CUSTOM_CONSENTS = "PublisherCustomConsents"; - public static String PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS = "PublisherCustomLegitimateInterests"; - public static String VENDORS_ALLOWED_SEGMENT_TYPE = "VendorsAllowedSegmentType"; - public static String VENDORS_ALLOWED = "VendorsAllowed"; - public static String VENDORS_DISCLOSED_SEGMENT_TYPE = "VendorsDisclosedSegmentType"; - public static String VENDORS_DISCLOSED = "VendorsDisclosed"; + public static final String VERSION = "Version"; + public static final String CREATED = "Created"; + public static final String LAST_UPDATED = "LastUpdated"; + public static final String CMP_ID = "CmpId"; + public static final String CMP_VERSION = "CmpVersion"; + public static final String CONSENT_SCREEN = "ConsentScreen"; + public static final String CONSENT_LANGUAGE = "ConsentLanguage"; + public static final String VENDOR_LIST_VERSION = "VendorListVersion"; + public static final String POLICY_VERSION = "PolicyVersion"; + public static final String IS_SERVICE_SPECIFIC = "IsServiceSpecific"; + public static final String USE_NON_STANDARD_STACKS = "UseNonStandardStacks"; + public static final String SPECIAL_FEATURE_OPTINS = "SpecialFeatureOptins"; + public static final String PURPOSE_CONSENTS = "PurposeConsents"; + public static final String PURPOSE_LEGITIMATE_INTERESTS = "PurposeLegitimateInterests"; + public static final String PURPOSE_ONE_TREATMENT = "PurposeOneTreatment"; + public static final String PUBLISHER_COUNTRY_CODE = "PublisherCountryCode"; + public static final String VENDOR_CONSENTS = "VendorConsents"; + public static final String VENDOR_LEGITIMATE_INTERESTS = "VendorLegitimateInterests"; + public static final String PUBLISHER_RESTRICTIONS = "PublisherRestrictions"; + public static final String PUBLISHER_PURPOSES_SEGMENT_TYPE = "PublisherPurposesSegmentType"; + public static final String PUBLISHER_CONSENTS = "PublisherConsents"; + public static final String PUBLISHER_LEGITIMATE_INTERESTS = "PublisherLegitimateInterests"; + public static final String NUM_CUSTOM_PURPOSES = "NumCustomPurposes"; + public static final String PUBLISHER_CUSTOM_CONSENTS = "PublisherCustomConsents"; + public static final String PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS = "PublisherCustomLegitimateInterests"; + public static final String VENDORS_ALLOWED_SEGMENT_TYPE = "VendorsAllowedSegmentType"; + public static final String VENDORS_ALLOWED = "VendorsAllowed"; + public static final String VENDORS_DISCLOSED_SEGMENT_TYPE = "VendorsDisclosedSegmentType"; + public static final String VENDORS_DISCLOSED = "VendorsDisclosed"; //@formatter:off - public static List TCFEUV2_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List TCFEUV2_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { TcfEuV2Field.VERSION, TcfEuV2Field.CREATED, TcfEuV2Field.LAST_UPDATED, @@ -60,7 +60,7 @@ public class TcfEuV2Field { //@formatter:on //@formatter:off - public static List TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, TcfEuV2Field.PUBLISHER_CONSENTS, TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, @@ -71,14 +71,14 @@ public class TcfEuV2Field { //@formatter:on //@formatter:off - public static List TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED, }); //@formatter:on //@formatter:off - public static List TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_DISCLOSED, }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 934f57ac..f19d81a0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -5,25 +5,25 @@ public class UsCaField { - public static String VERSION = "Version"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String SHARING_OPT_OUT_NOTICE = "SharingOptOutNotice"; - public static String SENSITIVE_DATA_LIMIT_USE_NOTICE = "SensitiveDataLimitUseNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String SHARING_OPT_OUT = "SharingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String PERSONAL_DATA_CONSENTS = "PersonalDataConsents"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String SHARING_OPT_OUT_NOTICE = "SharingOptOutNotice"; + public static final String SENSITIVE_DATA_LIMIT_USE_NOTICE = "SensitiveDataLimitUseNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String SHARING_OPT_OUT = "SharingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String PERSONAL_DATA_CONSENTS = "PersonalDataConsents"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USCA_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USCA_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsCaField.VERSION, UsCaField.SALE_OPT_OUT_NOTICE, UsCaField.SHARING_OPT_OUT_NOTICE, @@ -40,7 +40,7 @@ public class UsCaField { //@formatter:on //@formatter:off - public static List USCA_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USCA_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsCaField.GPC_SEGMENT_TYPE, UsCaField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index cae4e769..bc6af959 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -5,24 +5,24 @@ public class UsCoField { - public static String VERSION = "Version"; - public static String SHARING_NOTICE = "SharingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String SHARING_NOTICE = "SharingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USCO_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USCO_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsCoField.VERSION, UsCoField.SHARING_NOTICE, UsCoField.SALE_OPT_OUT_NOTICE, @@ -38,7 +38,7 @@ public class UsCoField { //@formatter:on //@formatter:off - public static List USCO_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USCO_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsCoField.GPC_SEGMENT_TYPE, UsCoField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 9662e1e3..be7d112e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -5,24 +5,24 @@ public class UsCtField { - public static String VERSION = "Version"; - public static String SHARING_NOTICE = "SharingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String SHARING_NOTICE = "SharingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USCT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USCT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsCtField.VERSION, UsCtField.SHARING_NOTICE, UsCtField.SALE_OPT_OUT_NOTICE, @@ -38,7 +38,7 @@ public class UsCtField { //@formatter:on //@formatter:off - public static List USCT_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USCT_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsCtField.GPC_SEGMENT_TYPE, UsCtField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index e18427b1..a1b34fa9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -5,29 +5,29 @@ public class UsNatField { - public static String VERSION = "Version"; - public static String SHARING_NOTICE = "SharingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String SHARING_OPT_OUT_NOTICE = "SharingOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE = "SensitiveDataProcessingOptOutNotice"; - public static String SENSITIVE_DATA_LIMIT_USE_NOTICE = "SensitiveDataLimitUseNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String SHARING_OPT_OUT = "SharingOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String PERSONAL_DATA_CONSENTS = "PersonalDataConsents"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String SHARING_NOTICE = "SharingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String SHARING_OPT_OUT_NOTICE = "SharingOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE = "SensitiveDataProcessingOptOutNotice"; + public static final String SENSITIVE_DATA_LIMIT_USE_NOTICE = "SensitiveDataLimitUseNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String SHARING_OPT_OUT = "SharingOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String PERSONAL_DATA_CONSENTS = "PersonalDataConsents"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USNAT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USNAT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsNatField.VERSION, UsNatField.SHARING_NOTICE, UsNatField.SALE_OPT_OUT_NOTICE, @@ -48,7 +48,7 @@ public class UsNatField { //@formatter:on //@formatter:off - public static List USNAT_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USNAT_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 01cedc67..afd544ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -5,21 +5,21 @@ public class UsUtField { - public static String VERSION = "Version"; - public static String SHARING_NOTICE = "SharingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE = "SensitiveDataProcessingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String SHARING_NOTICE = "SharingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE = "SensitiveDataProcessingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; //@formatter:off - public static List USUT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USUT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsUtField.VERSION, UsUtField.SHARING_NOTICE, UsUtField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 46cb4dbb..900116b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -5,20 +5,20 @@ public class UsVaField { - public static String VERSION = "Version"; - public static String SHARING_NOTICE = "SharingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String SHARING_NOTICE = "SharingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; //@formatter:off - public static List USVA_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USVA_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsVaField.VERSION, UsVaField.SHARING_NOTICE, UsVaField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index 2551632c..cc55f2b0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -5,10 +5,10 @@ public class UspV1Field { - public static String VERSION = "Version"; - public static String NOTICE = "Notice"; - public static String OPT_OUT_SALE = "OptOutSale"; - public static String LSPA_COVERED = "LspaCovered"; + public static final String VERSION = "Version"; + public static final String NOTICE = "Notice"; + public static final String OPT_OUT_SALE = "OptOutSale"; + public static final String LSPA_COVERED = "LspaCovered"; //@formatter:off public static List USPV1_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java index eb5d5459..9ed03373 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; import com.iab.gpp.encoder.datatype.SubstringException; import com.iab.gpp.encoder.error.DecodingException; @@ -20,8 +22,9 @@ public boolean hasField(String fieldName) { @Override public Object getFieldValue(String fieldName) { - if (this.fields.containsKey(fieldName)) { - return this.fields.get(fieldName).getValue(); + AbstractEncodableBitStringDataType field = this.fields.get(fieldName); + if (field != null) { + return field.getValue(); } else { return null; } @@ -29,8 +32,9 @@ public Object getFieldValue(String fieldName) { @Override public void setFieldValue(String fieldName, Object value) throws InvalidFieldException { - if (this.fields.containsKey(fieldName)) { - this.fields.get(fieldName).setValue(value); + AbstractEncodableBitStringDataType field = this.fields.get(fieldName); + if (field != null) { + field.setValue(value); } else { throw new InvalidFieldException(fieldName + " not found"); } @@ -41,15 +45,16 @@ public String[][] getSegments() { } public List encodeSegmentsToBitStrings() throws EncodingException { - List segmentBitStrings = new ArrayList<>(); - for (int i = 0; i < this.segments.length; i++) { - String segmentBitString = ""; + int length = this.segments.length; + List segmentBitStrings = new ArrayList<>(length); + for (int i = 0; i < length; i++) { + StringBuilder segmentBitString = new StringBuilder(); for (int j = 0; j < this.segments[i].length; j++) { String fieldName = this.segments[i][j]; - if (this.fields.containsKey(fieldName)) { + AbstractEncodableBitStringDataType field = this.fields.get(fieldName); + if (field != null) { try { - AbstractEncodableBitStringDataType field = this.fields.get(fieldName); - segmentBitString += field.encode(); + segmentBitString.append(field.encode()); } catch (Exception e) { throw new EncodingException("Unable to encode " + fieldName, e); } @@ -57,27 +62,27 @@ public List encodeSegmentsToBitStrings() throws EncodingException { throw new EncodingException("Field not found: '" + fieldName + "'"); } } - segmentBitStrings.add(segmentBitString); + segmentBitStrings.add(segmentBitString.toString()); } return segmentBitStrings; } - public void decodeSegmentsFromBitStrings(List segmentBitStrings) throws DecodingException { + public void decodeSegmentsFromBitStrings(List segmentBitStrings) throws DecodingException { for (int i = 0; i < this.segments.length && i < segmentBitStrings.size(); i++) { decodeSegmentFromBitString(segments[i], segmentBitStrings.get(i)); } } - private void decodeSegmentFromBitString(String[] segment, String segmentBitString) throws DecodingException { + private void decodeSegmentFromBitString(String[] segment, BitString segmentBitString) throws DecodingException { if (segmentBitString != null && segmentBitString.length() > 0) { int index = 0; for (int j = 0; j < segment.length; j++) { String fieldName = segment[j]; AbstractEncodableBitStringDataType field = this.fields.get(fieldName); - if (this.fields.containsKey(fieldName)) { + if (field != null) { try { - String substring = field.substring(segmentBitString, index); + BitString substring = field.substring(segmentBitString, index); field.decode(substring); index += substring.length(); } catch (SubstringException e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index fd5d991c..c4e18550 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -8,9 +9,9 @@ public class HeaderV1 extends AbstractLazilyEncodableSection { - public static int ID = 3; - public static int VERSION = 1; - public static String NAME = "header"; + public static final int ID = 3; + public static final int VERSION = 1; + public static final String NAME = "header"; public HeaderV1() { super(); @@ -38,9 +39,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new HeaderV1CoreSegment()); - return segments; + return Collections.singletonList(new HeaderV1CoreSegment()); } @Override @@ -62,7 +61,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); for(EncodableSegment segment : segments) { encodedSegments.add(segment.encode()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java index 976805d3..3c280cc9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java @@ -8,9 +8,9 @@ public class Sections { - public static List SECTION_ORDER; + public static final List SECTION_ORDER; - public static Map SECTION_ID_NAME_MAP; + public static final Map SECTION_ID_NAME_MAP; static { SECTION_ID_NAME_MAP = new HashMap<>(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 194a82dc..add7ab2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -1,10 +1,11 @@ package com.iab.gpp.encoder.section; -import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; +import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.TcfCaV1Field; @@ -15,9 +16,9 @@ public class TcfCaV1 extends AbstractLazilyEncodableSection { - public static int ID = 5; - public static int VERSION = 1; - public static String NAME = "tcfcav1"; + public static final int ID = 5; + public static final int VERSION = 1; + public static final String NAME = "tcfcav1"; public TcfCaV1() { super(); @@ -45,11 +46,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new TcfCaV1CoreSegment()); - segments.add(new TcfCaV1PublisherPurposesSegment()); - segments.add(new TcfCaV1DisclosedVendorsSegment()); - return segments; + return Arrays.asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); } @Override @@ -93,7 +90,7 @@ public List decodeSection(String encodedString) { @Override public String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encode()); encodedSegments.add(segments.get(1).encode()); @@ -109,7 +106,7 @@ public void setFieldValue(String fieldName, Object value) throws InvalidFieldExc super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { - ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC")); + ZonedDateTime utcDateTime = ZonedDateTime.now(DatetimeEncoder.UTC); super.setFieldValue(TcfCaV1Field.CREATED, utcDateTime); super.setFieldValue(TcfCaV1Field.LAST_UPDATED, utcDateTime); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 1f7f2b1e..c2bf4022 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -1,10 +1,11 @@ package com.iab.gpp.encoder.section; -import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; +import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.TcfEuV2Field; @@ -16,9 +17,9 @@ public class TcfEuV2 extends AbstractLazilyEncodableSection { - public static int ID = 2; - public static int VERSION = 2; - public static String NAME = "tcfeuv2"; + public static final int ID = 2; + public static final int VERSION = 2; + public static final String NAME = "tcfeuv2"; public TcfEuV2() { super(); @@ -46,12 +47,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new TcfEuV2CoreSegment()); - segments.add(new TcfEuV2PublisherPurposesSegment()); - segments.add(new TcfEuV2VendorsAllowedSegment()); - segments.add(new TcfEuV2VendorsDisclosedSegment()); - return segments; + return Arrays.asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); } @Override @@ -99,7 +95,7 @@ public List decodeSection(String encodedString) { @Override public String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encode()); @@ -127,7 +123,7 @@ public void setFieldValue(String fieldName, Object value) throws InvalidFieldExc super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { - ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC")); + ZonedDateTime utcDateTime = ZonedDateTime.now(DatetimeEncoder.UTC); super.setFieldValue(TcfEuV2Field.CREATED, utcDateTime); super.setFieldValue(TcfEuV2Field.LAST_UPDATED, utcDateTime); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index e80c4680..273dfcf3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -8,10 +9,10 @@ import com.iab.gpp.encoder.segment.UsCaGpcSegment; public class UsCa extends AbstractLazilyEncodableSection { - - public static int ID = 8; - public static int VERSION = 1; - public static String NAME = "usca"; + + public static final int ID = 8; + public static final int VERSION = 1; + public static final String NAME = "usca"; public UsCa() { super(); @@ -39,10 +40,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsCaCoreSegment()); - segments.add(new UsCaGpcSegment()); - return segments; + return Arrays.asList(new UsCaCoreSegment(), new UsCaGpcSegment()); } @Override @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 9e5495c0..46a48328 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -8,10 +9,10 @@ import com.iab.gpp.encoder.segment.UsCoGpcSegment; public class UsCo extends AbstractLazilyEncodableSection { - - public static int ID = 10; - public static int VERSION = 1; - public static String NAME = "usco"; + + public static final int ID = 10; + public static final int VERSION = 1; + public static final String NAME = "usco"; public UsCo() { super(); @@ -39,12 +40,9 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsCoCoreSegment()); - segments.add(new UsCoGpcSegment()); - return segments; + return Arrays.asList(new UsCoCoreSegment(), new UsCoGpcSegment()); } - + @Override protected List decodeSection(String encodedString) { List segments = initializeSegments(); @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 0f2f9569..f66f882a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -9,9 +10,9 @@ public class UsCt extends AbstractLazilyEncodableSection { - public static int ID = 12; - public static int VERSION = 1; - public static String NAME = "usct"; + public static final int ID = 12; + public static final int VERSION = 1; + public static final String NAME = "usct"; public UsCt() { super(); @@ -39,10 +40,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsCtCoreSegment()); - segments.add(new UsCtGpcSegment()); - return segments; + return Arrays.asList(new UsCtCoreSegment(), new UsCtGpcSegment()); } @Override @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index a32950d8..f2aa096f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -9,9 +10,9 @@ public class UsNat extends AbstractLazilyEncodableSection { - public static int ID = 7; - public static int VERSION = 1; - public static String NAME = "usnat"; + public static final int ID = 7; + public static final int VERSION = 1; + public static final String NAME = "usnat"; public UsNat() { super(); @@ -39,10 +40,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsNatCoreSegment()); - segments.add(new UsNatGpcSegment()); - return segments; + return Arrays.asList(new UsNatCoreSegment(), new UsNatGpcSegment()); } @Override @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 1c605fec..4cbf6471 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -8,9 +9,9 @@ public class UsUt extends AbstractLazilyEncodableSection { - public static int ID = 11; - public static int VERSION = 1; - public static String NAME = "usut"; + public static final int ID = 11; + public static final int VERSION = 1; + public static final String NAME = "usut"; public UsUt() { super(); @@ -38,9 +39,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsUtCoreSegment()); - return segments; + return Collections.singletonList(new UsUtCoreSegment()); } @Override @@ -62,7 +61,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); for(EncodableSegment segment : segments) { encodedSegments.add(segment.encode()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 568c6575..bf452242 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -8,9 +9,9 @@ public class UsVa extends AbstractLazilyEncodableSection { - public static int ID = 9; - public static int VERSION = 1; - public static String NAME = "usva"; + public static final int ID = 9; + public static final int VERSION = 1; + public static final String NAME = "usva"; public UsVa() { super(); @@ -38,9 +39,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsVaCoreSegment()); - return segments; + return Collections.singletonList(new UsVaCoreSegment()); } @Override @@ -62,7 +61,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); for (EncodableSegment segment : segments) { encodedSegments.add(segment.encode()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index e70261e4..52a2124c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -8,9 +9,9 @@ public class UspV1 extends AbstractLazilyEncodableSection { - public static int ID = 6; - public static int VERSION = 1; - public static String NAME = "uspv1"; + public static final int ID = 6; + public static final int VERSION = 1; + public static final String NAME = "uspv1"; public UspV1() { super(); @@ -38,9 +39,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UspV1CoreSegment()); - return segments; + return Collections.singletonList(new UspV1CoreSegment()); } @Override @@ -62,7 +61,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); for(EncodableSegment segment : segments) { encodedSegments.add(segment.encode()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 8726e16d..ed3af425 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.Fields; @@ -33,8 +34,9 @@ public Object getFieldValue(String fieldName) { this.decoded = true; } - if (this.fields.containsKey(fieldName)) { - return this.fields.get(fieldName).getValue(); + DataType field = this.fields.get(fieldName); + if (field != null) { + return field.getValue(); } else { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } @@ -47,8 +49,9 @@ public void setFieldValue(String fieldName, Object value) { this.decoded = true; } - if (this.fields.containsKey(fieldName)) { - this.fields.get(fieldName).setValue(value); + DataType field = this.fields.get(fieldName); + if (field != null) { + field.setValue(value); this.dirty = true; } else { throw new InvalidFieldException(fieldName + " not found"); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 5f944d90..29b88d21 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -4,6 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -36,7 +37,7 @@ protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(HeaderV1Field.ID, new EncodableFixedInteger(6, HeaderV1.ID)); fields.put(HeaderV1Field.VERSION, new EncodableFixedInteger(6, HeaderV1.VERSION)); - fields.put(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange(new ArrayList<>())); + fields.put(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange(new ArrayList<>(0))); return fields; } @@ -53,7 +54,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode HeaderV1CoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index fbdc9479..aef32362 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -2,10 +2,10 @@ import java.time.ZonedDateTime; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; @@ -53,17 +53,12 @@ protected EncodableBitStringFields initializeFields() { fields.put(TcfCaV1Field.VENDOR_LIST_VERSION, new EncodableFixedInteger(12, 0)); fields.put(TcfCaV1Field.TCF_POLICY_VERSION, new EncodableFixedInteger(6, 2)); fields.put(TcfCaV1Field.USE_NON_STANDARD_STACKS, new EncodableBoolean(false)); - fields.put(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, new EncodableFixedBitfield( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false))); - fields.put(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, - new EncodableFixedBitfield(Arrays.asList(false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false))); - fields.put(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, - new EncodableFixedBitfield(Arrays.asList(false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false))); - fields.put(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, new EncodableOptimizedFixedRange(new ArrayList<>())); - fields.put(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, new EncodableOptimizedFixedRange(new ArrayList<>())); - fields.put(TcfCaV1Field.PUB_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, new ArrayList<>(), false)); + fields.put(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, new EncodableFixedBitfield(12)); + fields.put(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); + fields.put(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); + fields.put(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, new EncodableOptimizedFixedRange(new ArrayList<>(0))); + fields.put(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, new EncodableOptimizedFixedRange(new ArrayList<>(0))); + fields.put(TcfCaV1Field.PUB_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, new ArrayList<>(0), false)); return fields; } @@ -80,7 +75,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1CoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index cbd7e90f..2a040523 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -4,6 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -34,7 +35,7 @@ public List getFieldNames() { protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); - fields.put(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange(new ArrayList<>())); + fields.put(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange(new ArrayList<>(0))); return fields; } @@ -51,7 +52,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1DisclosedVendorsSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 1ab89c0b..7a9cc0b5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -1,11 +1,11 @@ package com.iab.gpp.encoder.segment; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.function.IntSupplier; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -37,12 +37,8 @@ public List getFieldNames() { protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); - fields.put(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, - new EncodableFixedBitfield(Arrays.asList(false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false))); - fields.put(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, - new EncodableFixedBitfield(Arrays.asList(false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false))); + fields.put(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); + fields.put(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); EncodableFixedInteger numCustomPurposes = new EncodableFixedInteger(6, 0); fields.put(TcfCaV1Field.NUM_CUSTOM_PURPOSES, numCustomPurposes); @@ -57,10 +53,10 @@ public int getAsInt() { }; fields.put(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>())); + new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>(0))); fields.put(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, - new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>())); + new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>(0))); return fields; } @@ -77,7 +73,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1PublisherPurposesSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 5b516bde..2c6a147f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -2,10 +2,10 @@ import java.time.ZonedDateTime; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; @@ -54,20 +54,15 @@ protected EncodableBitStringFields initializeFields() { fields.put(TcfEuV2Field.POLICY_VERSION, new EncodableFixedInteger(6, 2)); fields.put(TcfEuV2Field.IS_SERVICE_SPECIFIC, new EncodableBoolean(false)); fields.put(TcfEuV2Field.USE_NON_STANDARD_STACKS, new EncodableBoolean(false)); - fields.put(TcfEuV2Field.SPECIAL_FEATURE_OPTINS, new EncodableFixedBitfield( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false))); - fields.put(TcfEuV2Field.PURPOSE_CONSENTS, - new EncodableFixedBitfield(Arrays.asList(false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false))); - fields.put(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS, - new EncodableFixedBitfield(Arrays.asList(false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false))); + fields.put(TcfEuV2Field.SPECIAL_FEATURE_OPTINS, new EncodableFixedBitfield(12)); + fields.put(TcfEuV2Field.PURPOSE_CONSENTS, new EncodableFixedBitfield(24)); + fields.put(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); fields.put(TcfEuV2Field.PURPOSE_ONE_TREATMENT, new EncodableBoolean(false)); fields.put(TcfEuV2Field.PUBLISHER_COUNTRY_CODE, new EncodableFixedString(2, "AA")); - fields.put(TcfEuV2Field.VENDOR_CONSENTS, new EncodableOptimizedFixedRange(new ArrayList<>())); - fields.put(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, new EncodableOptimizedFixedRange(new ArrayList<>())); + fields.put(TcfEuV2Field.VENDOR_CONSENTS, new EncodableOptimizedFixedRange(new ArrayList<>(0))); + fields.put(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, new EncodableOptimizedFixedRange(new ArrayList<>(0))); - fields.put(TcfEuV2Field.PUBLISHER_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, new ArrayList<>(), false)); + fields.put(TcfEuV2Field.PUBLISHER_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, new ArrayList<>(0), false)); return fields; } @@ -84,7 +79,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2CoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 0b751017..cf09ab53 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -1,11 +1,11 @@ package com.iab.gpp.encoder.segment; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.function.IntSupplier; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -37,12 +37,8 @@ public List getFieldNames() { protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); - fields.put(TcfEuV2Field.PUBLISHER_CONSENTS, - new EncodableFixedBitfield(Arrays.asList(false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false))); - fields.put(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, - new EncodableFixedBitfield(Arrays.asList(false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false, false, false, false))); + fields.put(TcfEuV2Field.PUBLISHER_CONSENTS, new EncodableFixedBitfield(24)); + fields.put(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); EncodableFixedInteger numCustomPurposes = new EncodableFixedInteger(6, 0); fields.put(TcfEuV2Field.NUM_CUSTOM_PURPOSES, numCustomPurposes); @@ -57,10 +53,10 @@ public int getAsInt() { }; fields.put(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS, - new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>())); + new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>(0))); fields.put(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS, - new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>())); + new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>(0))); return fields; } @@ -77,7 +73,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2PublisherPurposesSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index e09b48bb..cbdce7c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -4,6 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -34,7 +35,7 @@ public List getFieldNames() { protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, new EncodableFixedInteger(3, 2)); - fields.put(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange(new ArrayList<>())); + fields.put(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange(new ArrayList<>(0))); return fields; } @@ -51,7 +52,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2VendorsAllowedSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index c66b012d..b76bf89b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -4,6 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -34,7 +35,7 @@ public List getFieldNames() { protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); - fields.put(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange(new ArrayList<>())); + fields.put(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange(new ArrayList<>(0))); return fields; } @@ -51,7 +52,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2VendorsDisclosedSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 25584c00..0dcf9344 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -86,7 +87,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 19a36702..c6ea185b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -51,7 +52,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCaGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 1f6c14c7..5e504036 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -83,7 +84,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCoCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 7be0d974..e8104b93 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -51,7 +52,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCoGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index 066ad749..f76d0a3c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -84,7 +85,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCtCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index fb009c89..ae3717c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -51,7 +52,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCtGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 99be5310..2938ae64 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -51,7 +52,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsMtGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 6c7a7945..9f53912a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -94,7 +95,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); // Necessary to maintain backwards compatibility when sensitive data processing changed from a // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 1b394443..d5acc065 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -86,7 +87,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsUtCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index cb57fb92..82eb17c8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -84,7 +85,7 @@ protected void decodeSegment(String encodedString, EncodableBitStringFields fiel this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsVaCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 59b3c557..25136157 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -36,12 +36,12 @@ protected GenericFields initializeFields() { @Override protected String encodeSegment(GenericFields fields) { - String str = ""; - str += fields.get(UspV1Field.VERSION).getValue(); - str += fields.get(UspV1Field.NOTICE).getValue(); - str += fields.get(UspV1Field.OPT_OUT_SALE).getValue(); - str += fields.get(UspV1Field.LSPA_COVERED).getValue(); - return str; + StringBuilder str = new StringBuilder(); + str.append(fields.get(UspV1Field.VERSION).getValue()); + str.append(fields.get(UspV1Field.NOTICE).getValue()); + str.append(fields.get(UspV1Field.OPT_OUT_SALE).getValue()); + str.append(fields.get(UspV1Field.LSPA_COVERED).getValue()); + return str.toString(); } @Override diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index bd154790..c1aea3d1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -24,17 +24,17 @@ public void testEncode3() { @Test public void testDecode1() { - Assertions.assertEquals("000011000001000000000001001100000000000000000000", base64UrlEncoder.decode("DBABMAAA")); + Assertions.assertEquals("000011000001000000000001001100000000000000000000", base64UrlEncoder.decode("DBABMAAA").toString()); } @Test public void testDecode2() { - Assertions.assertEquals("000011000001000000000010001101011000000000000000", base64UrlEncoder.decode("DBACNYAA")); + Assertions.assertEquals("000011000001000000000010001101011000000000000000", base64UrlEncoder.decode("DBACNYAA").toString()); } @Test public void testDecode3() { - Assertions.assertEquals("000011000001000000000001100011110000000000000000", base64UrlEncoder.decode("DBABjwAA")); + Assertions.assertEquals("000011000001000000000001100011110000000000000000", base64UrlEncoder.decode("DBABjwAA").toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java index d015acd1..cdecadc3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java @@ -3,18 +3,20 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.bitstring.BitString; + public class EncodableBooleanTest { @Test public void testSubstring1() throws SubstringException { Assertions.assertEquals("000000000000000000000000000000000000", - new EncodableDatetime().substring("10000000000000000000000000000000000001", 1)); + new EncodableDatetime().substring(BitString.of("10000000000000000000000000000000000001"), 1).toString()); } @Test public void testSubstring2() throws SubstringException { Assertions.assertEquals("111111111111111111111111111111111111", - new EncodableDatetime().substring("01111111111111111111111111111111111110", 1)); + new EncodableDatetime().substring(BitString.of("01111111111111111111111111111111111110"), 1).toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java index 43d271ba..bd9460b8 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class EncodableDatetimeTest { @@ -9,13 +11,13 @@ public class EncodableDatetimeTest { @Test public void testSubstring1() throws DecodingException, SubstringException { Assertions.assertEquals("000000000000000000000000000000000000", - new EncodableDatetime().substring("10000000000000000000000000000000000001", 1)); + new EncodableDatetime().substring(BitString.of("10000000000000000000000000000000000001"), 1).toString()); } @Test public void testSubstring2() throws DecodingException, SubstringException { Assertions.assertEquals("111111111111111111111111111111111111", - new EncodableDatetime().substring("01111111111111111111111111111111111110", 1)); + new EncodableDatetime().substring(BitString.of("01111111111111111111111111111111111110"), 1).toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java index 765d5154..76e5919b 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class EncodableFibonacciIntegerRangeTest { @@ -9,6 +11,6 @@ public class EncodableFibonacciIntegerRangeTest { @Test public void testSubstring1() throws DecodingException, SubstringException { Assertions.assertEquals("0000000000100001110110011", - new EncodableFibonacciIntegerRange().substring("100000000001000011101100110", 1)); + new EncodableFibonacciIntegerRange().substring(BitString.of("100000000001000011101100110"), 1).toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerTest.java index 61dd7d0a..f5796ff4 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerTest.java @@ -2,13 +2,15 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class EncodableFibonacciIntegerTest { @Test public void testSubstring1() throws DecodingException, SubstringException { - Assertions.assertEquals("0011", new EncodableFibonacciInteger().substring("100111", 1)); + Assertions.assertEquals("0011", new EncodableFibonacciInteger().substring(BitString.of("100111"), 1).toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java index 89ad98af..17d98cfe 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java @@ -3,16 +3,18 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.bitstring.BitString; + public class EncodableFixedBitfieldTest { @Test public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000", new EncodableFixedBitfield(3).substring("10001", 1)); + Assertions.assertEquals("000", new EncodableFixedBitfield(3).substring(BitString.of("10001"), 1).toString()); } @Test public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111", new EncodableFixedBitfield(3).substring("01110", 1)); + Assertions.assertEquals("111", new EncodableFixedBitfield(3).substring(BitString.of("01110"), 1).toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java index 7146cc01..3cf83666 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java @@ -3,16 +3,18 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.bitstring.BitString; + public class EncodableFixedIntegerListTest { @Test public void testSubstring1() throws SubstringException { - Assertions.assertEquals("1000", new EncodableFixedIntegerList(2, 2).substring("10001", 0)); + Assertions.assertEquals("1000", new EncodableFixedIntegerList(2, 2).substring(BitString.of("10001"), 0).toString()); } @Test public void testSubstring2() throws SubstringException { - Assertions.assertEquals("1110", new EncodableFixedIntegerList(2, 2).substring("01110", 1)); + Assertions.assertEquals("1110", new EncodableFixedIntegerList(2, 2).substring(BitString.of("01110"), 1).toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index 0982aa40..2f4a3d7b 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -3,6 +3,8 @@ import java.util.Arrays; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -11,15 +13,15 @@ public class EncodableFixedIntegerRangeTest { @Test public void testSubstring1() throws DecodingException, SubstringException { Assertions.assertEquals("00000000001000000000000000011100000000000001010000000000001000", - new EncodableFixedIntegerRange().substring("1000000000010000000000000000111000000000000010100000000000010001", - 1)); + new EncodableFixedIntegerRange().substring(BitString.of("1000000000010000000000000000111000000000000010100000000000010001"), + 1).toString()); } @Test public void testSubstring2() throws DecodingException, SubstringException { Assertions.assertEquals("00000000000100000000000011101", new EncodableFixedIntegerRange().substring( - "000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110110000000000010000000000001110100000000000000000000000000000", - 230)); + BitString.of("000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110110000000000010000000000001110100000000000000000000000000000"), + 230).toString()); } @Test @@ -39,14 +41,14 @@ public void testEncode2() throws EncodingException { @Test public void testDecode1() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode("00000000000100000000000011100"); + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100")); Assertions.assertEquals(Arrays.asList(28), encodableFixedIntegerRange.getValue()); } @Test public void testDecode2() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode("00000000000100000000000011101"); + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101")); Assertions.assertEquals(Arrays.asList(29), encodableFixedIntegerRange.getValue()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java index 709fd156..54a2c9cb 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java @@ -3,16 +3,18 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.bitstring.BitString; + public class EncodableFixedIntegerTest { @Test public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000", new EncodableFixedInteger(3).substring("10001", 1)); + Assertions.assertEquals("000", new EncodableFixedInteger(3).substring(BitString.of("10001"), 1).toString()); } @Test public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111", new EncodableFixedInteger(3).substring("01110", 1)); + Assertions.assertEquals("111", new EncodableFixedInteger(3).substring(BitString.of("01110"), 1).toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java index 969a6c15..77beabe3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java @@ -3,16 +3,18 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.bitstring.BitString; + public class EncodableFixedStringTest { @Test public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000000000000", new EncodableFixedString(2).substring("10000000000001", 1)); + Assertions.assertEquals("000000000000", new EncodableFixedString(2).substring(BitString.of("10000000000001"), 1).toString()); } @Test public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111111111111", new EncodableFixedString(2).substring("01111111111110", 1)); + Assertions.assertEquals("111111111111", new EncodableFixedString(2).substring(BitString.of("01111111111110"), 1).toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 5551b3e4..1606424a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -4,6 +4,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.bitstring.BitString; + public class EncodableOptimizedFixedRangeTest { private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange(); @@ -35,39 +37,39 @@ public void testEncode4() { @Test public void testDecode1() { - encodableOptimizedFixedRange.decode("00000000001100000000000000001000000000001000000000000000000000001"); + encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001")); Assertions.assertEquals(Arrays.asList(12, 24, 48), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode2() { - encodableOptimizedFixedRange.decode("00000000000111100000000000000000001000000000001"); + encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001")); Assertions.assertEquals(Arrays.asList(18, 30), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode3() { - encodableOptimizedFixedRange.decode("000000000001110000000000000000000000000000001"); + encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001")); Assertions.assertEquals(Arrays.asList(28), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode4() { - encodableOptimizedFixedRange.decode("0000000000011101100000000000100000000000011101"); + encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101")); Assertions.assertEquals(Arrays.asList(29), encodableOptimizedFixedRange.getValue()); } @Test public void testSubstring1() throws SubstringException { Assertions.assertEquals("000000000001110000000000000000000000000000001", encodableOptimizedFixedRange.substring( - "000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000000000000000001000000000000000000000000000000", - 213)); + BitString.of("000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000000000000000001000000000000000000000000000000"), + 213).toString()); } @Test public void testSubstring2() throws SubstringException { Assertions.assertEquals("0000000000011101100000000000100000000000011101", encodableOptimizedFixedRange.substring( - "000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110110000000000010000000000001110100000000000000000000000000000", - 213)); + BitString.of("000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110110000000000010000000000001110100000000000000000000000000000"), + 213).toString()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index fea6ee70..02defec2 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class BooleanEncoderTest { @@ -18,18 +20,18 @@ public void testEncode2() { @Test public void testDecode1() { - Assertions.assertEquals(false, BooleanEncoder.decode("0")); + Assertions.assertEquals(false, BooleanEncoder.decode(BitString.of("0"))); } @Test public void testDecode2() { - Assertions.assertEquals(true, BooleanEncoder.decode("1")); + Assertions.assertEquals(true, BooleanEncoder.decode(BitString.of("1"))); } @Test public void testDecode3() { try { - BooleanEncoder.decode(""); + BooleanEncoder.decode(BitString.of("")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -39,7 +41,7 @@ public void testDecode3() { @Test public void testDecode4() { try { - BooleanEncoder.decode("2"); + BooleanEncoder.decode(BitString.of("2")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -49,7 +51,7 @@ public void testDecode4() { @Test public void testDecode5() { try { - BooleanEncoder.decode("00"); + BooleanEncoder.decode(BitString.of("00")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -59,7 +61,7 @@ public void testDecode5() { @Test public void testDecode6() { try { - BooleanEncoder.decode("01"); + BooleanEncoder.decode(BitString.of("01")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -69,7 +71,7 @@ public void testDecode6() { @Test public void testDecode7() { try { - BooleanEncoder.decode("10"); + BooleanEncoder.decode(BitString.of("10")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java index ec75a122..a8911830 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java @@ -4,6 +4,8 @@ import java.time.ZonedDateTime; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoderTest { @@ -12,7 +14,7 @@ public class DatetimeEncoderTest { public void test1() throws DecodingException { ZonedDateTime date1 = ZonedDateTime.now(ZoneId.of("UTC")); String encodedDate1 = DatetimeEncoder.encode(date1); - ZonedDateTime date2 = DatetimeEncoder.decode(encodedDate1); + ZonedDateTime date2 = DatetimeEncoder.decode(BitString.of(encodedDate1)); Assertions.assertEquals((date1.toInstant().toEpochMilli() / 100L) * 100L, date2.toInstant().toEpochMilli()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 5530b10b..696d1488 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -3,6 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerEncoderTest { @@ -38,43 +40,43 @@ public void testEncode7() { @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(1, FibonacciIntegerEncoder.decode("11")); + Assertions.assertEquals(1, FibonacciIntegerEncoder.decode(BitString.of("11"))); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(2, FibonacciIntegerEncoder.decode("011")); + Assertions.assertEquals(2, FibonacciIntegerEncoder.decode(BitString.of("011"))); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(3, FibonacciIntegerEncoder.decode("0011")); + Assertions.assertEquals(3, FibonacciIntegerEncoder.decode(BitString.of("0011"))); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(4, FibonacciIntegerEncoder.decode("1011")); + Assertions.assertEquals(4, FibonacciIntegerEncoder.decode(BitString.of("1011"))); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(5, FibonacciIntegerEncoder.decode("00011")); + Assertions.assertEquals(5, FibonacciIntegerEncoder.decode(BitString.of("00011"))); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(6, FibonacciIntegerEncoder.decode("10011")); + Assertions.assertEquals(6, FibonacciIntegerEncoder.decode(BitString.of("10011"))); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(7, FibonacciIntegerEncoder.decode("01011")); + Assertions.assertEquals(7, FibonacciIntegerEncoder.decode(BitString.of("01011"))); } @Test public void testDecode8() { try { - FibonacciIntegerEncoder.decode("110"); + FibonacciIntegerEncoder.decode(BitString.of("110")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -84,7 +86,7 @@ public void testDecode8() { @Test public void testDecode9() { try { - FibonacciIntegerEncoder.decode("1100"); + FibonacciIntegerEncoder.decode(BitString.of("1100")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -94,7 +96,7 @@ public void testDecode9() { @Test public void testDecode10() { try { - FibonacciIntegerEncoder.decode("0110000000"); + FibonacciIntegerEncoder.decode(BitString.of("0110000000")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index f0cb813f..8fef068e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -6,6 +6,8 @@ import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoderTest { @@ -49,40 +51,40 @@ public void testEncode7() { @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(new ArrayList<>(), FibonacciIntegerRangeEncoder.decode("000000000000")); + Assertions.assertEquals(new ArrayList<>(), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000000"))); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2), FibonacciIntegerRangeEncoder.decode("0000000000010011")); + Assertions.assertEquals(Arrays.asList(2), FibonacciIntegerRangeEncoder.decode(BitString.of("0000000000010011"))); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2, 3, 4, 5, 6), FibonacciIntegerRangeEncoder.decode("00000000000110111011")); + Assertions.assertEquals(Arrays.asList(2, 3, 4, 5, 6), FibonacciIntegerRangeEncoder.decode(BitString.of("00000000000110111011"))); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2, 5, 6, 7), FibonacciIntegerRangeEncoder.decode("000000000010001110011011")); + Assertions.assertEquals(Arrays.asList(2, 5, 6, 7), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000010001110011011"))); } @Test public void testDecode5() throws DecodingException { Assertions.assertEquals(Arrays.asList(3, 5, 6, 7, 8), - FibonacciIntegerRangeEncoder.decode("0000000000100001110110011")); + FibonacciIntegerRangeEncoder.decode(BitString.of("0000000000100001110110011"))); } @Test public void testDecode6() throws DecodingException { Assertions.assertEquals(Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12), - FibonacciIntegerRangeEncoder.decode("00000000001000111001101011")); + FibonacciIntegerRangeEncoder.decode(BitString.of("00000000001000111001101011"))); } @Test public void testDecode7() { try { - FibonacciIntegerRangeEncoder.decode("0011"); + FibonacciIntegerRangeEncoder.decode(BitString.of("0011")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -92,7 +94,7 @@ public void testDecode7() { @Test public void testDecode8() { try { - FibonacciIntegerRangeEncoder.decode("000000000002"); + FibonacciIntegerRangeEncoder.decode(BitString.of("000000000002")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index d66e3538..44dfed0a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -4,6 +4,8 @@ import java.util.Arrays; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -56,43 +58,43 @@ public void testEncode8() { @Test public void testDecode1() { - Assertions.assertEquals(new ArrayList<>(), FixedBitfieldEncoder.decode("")); + Assertions.assertEquals(new ArrayList<>(), FixedBitfieldEncoder.decode(BitString.of(""))); } @Test public void testDecode2() { - Assertions.assertEquals(Arrays.asList(false), FixedBitfieldEncoder.decode("0")); + Assertions.assertEquals(Arrays.asList(false), FixedBitfieldEncoder.decode(BitString.of("0"))); } @Test public void testDecode3() { - Assertions.assertEquals(Arrays.asList(true), FixedBitfieldEncoder.decode("1")); + Assertions.assertEquals(Arrays.asList(true), FixedBitfieldEncoder.decode(BitString.of("1"))); } @Test public void testDecode4() { - Assertions.assertEquals(Arrays.asList(false, false), FixedBitfieldEncoder.decode("00")); + Assertions.assertEquals(Arrays.asList(false, false), FixedBitfieldEncoder.decode(BitString.of("00"))); } @Test public void testDecode5() { - Assertions.assertEquals(Arrays.asList(false, true), FixedBitfieldEncoder.decode("01")); + Assertions.assertEquals(Arrays.asList(false, true), FixedBitfieldEncoder.decode(BitString.of("01"))); } @Test public void testDecode6() { - Assertions.assertEquals(Arrays.asList(true, false), FixedBitfieldEncoder.decode("10")); + Assertions.assertEquals(Arrays.asList(true, false), FixedBitfieldEncoder.decode(BitString.of("10"))); } @Test public void testDecode7() { - Assertions.assertEquals(Arrays.asList(true, true), FixedBitfieldEncoder.decode("11")); + Assertions.assertEquals(Arrays.asList(true, true), FixedBitfieldEncoder.decode(BitString.of("11"))); } @Test public void testDecode8() { try { - FixedBitfieldEncoder.decode("2"); + FixedBitfieldEncoder.decode(BitString.of("2")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index a30b882b..a9c0c765 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -44,36 +46,36 @@ public void testEncode6() { @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, FixedIntegerEncoder.decode("")); + Assertions.assertEquals(0, FixedIntegerEncoder.decode(BitString.of(""))); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(0, FixedIntegerEncoder.decode("0")); + Assertions.assertEquals(0, FixedIntegerEncoder.decode(BitString.of("0"))); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(0, FixedIntegerEncoder.decode("000000")); + Assertions.assertEquals(0, FixedIntegerEncoder.decode(BitString.of("000000"))); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(1, FixedIntegerEncoder.decode("1")); + Assertions.assertEquals(1, FixedIntegerEncoder.decode(BitString.of("1"))); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(1, FixedIntegerEncoder.decode("000001")); + Assertions.assertEquals(1, FixedIntegerEncoder.decode(BitString.of("000001"))); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(8, FixedIntegerEncoder.decode("1000")); + Assertions.assertEquals(8, FixedIntegerEncoder.decode(BitString.of("1000"))); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(8, FixedIntegerEncoder.decode("0000001000")); + Assertions.assertEquals(8, FixedIntegerEncoder.decode(BitString.of("0000001000"))); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 25de7e17..54f2a1d1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -4,6 +4,8 @@ import java.util.Arrays; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -111,93 +113,93 @@ public void testEncode19() { @Test public void testDecode1() { - Assertions.assertEquals(Arrays.asList(0, 0), FixedIntegerListEncoder.decode("", 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 0), FixedIntegerListEncoder.decode(BitString.of(""), 2, 2)); } @Test public void testDecode2() { - Assertions.assertEquals(Arrays.asList(0, 0), FixedIntegerListEncoder.decode("0000", 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 0), FixedIntegerListEncoder.decode(BitString.of("0000"), 2, 2)); } @Test public void testDecode3() { - Assertions.assertEquals(Arrays.asList(0, 1), FixedIntegerListEncoder.decode("0001", 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 1), FixedIntegerListEncoder.decode(BitString.of("0001"), 2, 2)); } @Test public void testDecode4() { - Assertions.assertEquals(Arrays.asList(0, 2), FixedIntegerListEncoder.decode("0010", 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 2), FixedIntegerListEncoder.decode(BitString.of("0010"), 2, 2)); } @Test public void testDecode5() { - Assertions.assertEquals(Arrays.asList(0, 3), FixedIntegerListEncoder.decode("0011", 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 3), FixedIntegerListEncoder.decode(BitString.of("0011"), 2, 2)); } @Test public void testDecode6() { - Assertions.assertEquals(Arrays.asList(1, 0), FixedIntegerListEncoder.decode("0100", 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 0), FixedIntegerListEncoder.decode(BitString.of("0100"), 2, 2)); } @Test public void testDecode7() { - Assertions.assertEquals(Arrays.asList(1, 1), FixedIntegerListEncoder.decode("0101", 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 1), FixedIntegerListEncoder.decode(BitString.of("0101"), 2, 2)); } @Test public void testDecode8() { - Assertions.assertEquals(Arrays.asList(1, 2), FixedIntegerListEncoder.decode("0110", 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 2), FixedIntegerListEncoder.decode(BitString.of("0110"), 2, 2)); } @Test public void testDecode9() { - Assertions.assertEquals(Arrays.asList(1, 3), FixedIntegerListEncoder.decode("0111", 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 3), FixedIntegerListEncoder.decode(BitString.of("0111"), 2, 2)); } @Test public void testDecode10() { - Assertions.assertEquals(Arrays.asList(2, 0), FixedIntegerListEncoder.decode("1000", 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 0), FixedIntegerListEncoder.decode(BitString.of("1000"), 2, 2)); } @Test public void testDecode11() { - Assertions.assertEquals(Arrays.asList(2, 1), FixedIntegerListEncoder.decode("1001", 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 1), FixedIntegerListEncoder.decode(BitString.of("1001"), 2, 2)); } @Test public void testDecode12() { - Assertions.assertEquals(Arrays.asList(2, 2), FixedIntegerListEncoder.decode("1010", 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 2), FixedIntegerListEncoder.decode(BitString.of("1010"), 2, 2)); } @Test public void testDecode13() { - Assertions.assertEquals(Arrays.asList(2, 3), FixedIntegerListEncoder.decode("1011", 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 3), FixedIntegerListEncoder.decode(BitString.of("1011"), 2, 2)); } @Test public void testDecode14() { - Assertions.assertEquals(Arrays.asList(3, 0), FixedIntegerListEncoder.decode("1100", 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 0), FixedIntegerListEncoder.decode(BitString.of("1100"), 2, 2)); } @Test public void testDecode15() { - Assertions.assertEquals(Arrays.asList(3, 1), FixedIntegerListEncoder.decode("1101", 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 1), FixedIntegerListEncoder.decode(BitString.of("1101"), 2, 2)); } @Test public void testDecode16() { - Assertions.assertEquals(Arrays.asList(3, 2), FixedIntegerListEncoder.decode("1110", 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 2), FixedIntegerListEncoder.decode(BitString.of("1110"), 2, 2)); } @Test public void testDecode17() { - Assertions.assertEquals(Arrays.asList(3, 3), FixedIntegerListEncoder.decode("1111", 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 3), FixedIntegerListEncoder.decode(BitString.of("1111"), 2, 2)); } @Test public void testDecode18() { try { - FixedIntegerListEncoder.decode("111111", 2, 2); + FixedIntegerListEncoder.decode(BitString.of("111111"), 2, 2); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -207,7 +209,7 @@ public void testDecode18() { @Test public void testDecode19() { try { - FixedIntegerListEncoder.decode("2", 2, 2); + FixedIntegerListEncoder.decode(BitString.of("2"), 2, 2); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -217,7 +219,7 @@ public void testDecode19() { @Test public void testDecode20() { try { - FixedIntegerListEncoder.decode("111", 2, 2); + FixedIntegerListEncoder.decode(BitString.of("111"), 2, 2); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 769763ea..bccca1c4 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -6,6 +6,8 @@ import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoderTest { @@ -65,54 +67,54 @@ public void testEncode9() { @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(new ArrayList<>(), FixedIntegerRangeEncoder.decode("000000000000")); + Assertions.assertEquals(new ArrayList<>(), FixedIntegerRangeEncoder.decode(BitString.of("000000000000"))); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2), FixedIntegerRangeEncoder.decode("00000000000100000000000000010")); + Assertions.assertEquals(Arrays.asList(2), FixedIntegerRangeEncoder.decode(BitString.of("00000000000100000000000000010"))); } @Test public void testDecode3() throws DecodingException { Assertions.assertEquals(Arrays.asList(2, 3, 4, 5, 6), - FixedIntegerRangeEncoder.decode("000000000001100000000000000100000000000000110")); + FixedIntegerRangeEncoder.decode(BitString.of("000000000001100000000000000100000000000000110"))); } @Test public void testDecode4() throws DecodingException { Assertions.assertEquals(Arrays.asList(2, 5, 6, 7), - FixedIntegerRangeEncoder.decode("00000000001000000000000000010100000000000001010000000000000111")); + FixedIntegerRangeEncoder.decode(BitString.of("00000000001000000000000000010100000000000001010000000000000111"))); } @Test public void testDecode5() throws DecodingException { Assertions.assertEquals(Arrays.asList(3, 5, 6, 7, 8), - FixedIntegerRangeEncoder.decode("00000000001000000000000000011100000000000001010000000000001000")); + FixedIntegerRangeEncoder.decode(BitString.of("00000000001000000000000000011100000000000001010000000000001000"))); } @Test public void testDecode6() throws DecodingException { Assertions.assertEquals(Arrays.asList(12, 24, 48), - FixedIntegerRangeEncoder.decode("000000000011000000000000011000000000000001100000000000000110000")); + FixedIntegerRangeEncoder.decode(BitString.of("000000000011000000000000011000000000000001100000000000000110000"))); } @Test public void testDecode7() throws DecodingException { Assertions.assertEquals(Arrays.asList(12, 24, 48, 49), FixedIntegerRangeEncoder - .decode("0000000000110000000000000110000000000000011000100000000001100000000000000110001")); + .decode(BitString.of("0000000000110000000000000110000000000000011000100000000001100000000000000110001"))); } @Test public void testDecode8() throws DecodingException { Assertions.assertEquals(Arrays.asList(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), FixedIntegerRangeEncoder.decode( - "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010")); + BitString.of("00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010"))); } @Test public void testDecode9() { try { - FixedIntegerRangeEncoder.decode("0011"); + FixedIntegerRangeEncoder.decode(BitString.of("0011")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -122,7 +124,7 @@ public void testDecode9() { @Test public void testDecode10() { try { - FixedIntegerRangeEncoder.decode("000000000002"); + FixedIntegerRangeEncoder.decode(BitString.of("000000000002")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index 9a90a6dd..63bfcc86 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -50,41 +52,41 @@ public void testEncode7() { @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, FixedLongEncoder.decode("")); + Assertions.assertEquals(0, FixedLongEncoder.decode(BitString.of(""))); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(0, FixedLongEncoder.decode("0")); + Assertions.assertEquals(0, FixedLongEncoder.decode(BitString.of("0"))); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(0, FixedLongEncoder.decode("000000")); + Assertions.assertEquals(0, FixedLongEncoder.decode(BitString.of("000000"))); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(1, FixedLongEncoder.decode("1")); + Assertions.assertEquals(1, FixedLongEncoder.decode(BitString.of("1"))); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(1, FixedLongEncoder.decode("000001")); + Assertions.assertEquals(1, FixedLongEncoder.decode(BitString.of("000001"))); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(16630898421L, FixedLongEncoder.decode("001111011111010001110101111011110101")); + Assertions.assertEquals(16630898421L, FixedLongEncoder.decode(BitString.of("001111011111010001110101111011110101"))); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(8, FixedLongEncoder.decode("1000")); + Assertions.assertEquals(8, FixedLongEncoder.decode(BitString.of("1000"))); } @Test public void testDecode8() throws DecodingException { - Assertions.assertEquals(8, FixedLongEncoder.decode("0000001000")); + Assertions.assertEquals(8, FixedLongEncoder.decode(BitString.of("0000001000"))); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index 4fef7dcc..29e01d04 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; + +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -29,18 +31,18 @@ public void testEncode3() { @Test public void testDecode1() { - Assertions.assertEquals("AB", FixedStringEncoder.decode("000000000001")); + Assertions.assertEquals("AB", FixedStringEncoder.decode(BitString.of("000000000001"))); } @Test public void testDecode2() { - Assertions.assertEquals("a", FixedStringEncoder.decode("100000111111")); + Assertions.assertEquals("a", FixedStringEncoder.decode(BitString.of("100000111111"))); } @Test public void testDecode3() { try { - FixedStringEncoder.decode("2"); + FixedStringEncoder.decode(BitString.of("2")); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-jmh/pom.xml b/iabgpp-jmh/pom.xml new file mode 100644 index 00000000..4202540a --- /dev/null +++ b/iabgpp-jmh/pom.xml @@ -0,0 +1,144 @@ + + + 4.0.0 + + com.iabgpp + iabgpp-core + 3.2.1-SNAPSHOT + + + iabgpp-jmh + jar + + JMH benchmark + + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + provided + + + com.iabgpp + iabgpp-encoder + 3.2.1-SNAPSHOT + + + + + UTF-8 + + + 1.37 + + + 1.8 + + + benchmarks + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + ${javac.target} + ${javac.target} + ${javac.target} + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + package + + shade + + + ${uberjar.name} + + + org.openjdk.jmh.Main + + + + + + + *:* + + META-INF/*.SF + META-INF/*.DSA + META-INF/*.RSA + + + + + + + + + + + + maven-clean-plugin + 2.5 + + + maven-deploy-plugin + 2.8.1 + + + maven-install-plugin + 2.5.1 + + + maven-jar-plugin + 2.4 + + + maven-javadoc-plugin + 2.9.1 + + + maven-resources-plugin + 2.6 + + + maven-site-plugin + 3.3 + + + maven-source-plugin + 2.2.1 + + + maven-surefire-plugin + 2.17 + + + + + + diff --git a/iabgpp-jmh/src/main/java/com/iab/gpp/encoder/MyBenchmark.java b/iabgpp-jmh/src/main/java/com/iab/gpp/encoder/MyBenchmark.java new file mode 100644 index 00000000..2111b9ef --- /dev/null +++ b/iabgpp-jmh/src/main/java/com/iab/gpp/encoder/MyBenchmark.java @@ -0,0 +1,41 @@ +package com.iab.gpp.encoder; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.infra.Blackhole; +import com.iab.gpp.encoder.section.TcfCaV1; +import com.iab.gpp.encoder.section.TcfEuV2; +import com.iab.gpp.encoder.section.UsCaV1; +import com.iab.gpp.encoder.section.UspV1; + +public class MyBenchmark { + private static final String GPP = "DBADOfdg~CQCT9cAQCT9cAPoABABGA-EMAP_gAP_gAAAAKXNV_G__bXlv-X736ftkeY1f9_h77sQxBhfJs-4FzLvW_JwX32EzNE36tqYKmRIAu3bBIQNtHJjUTVChaogVrzDsak2coTtKJ-BkiHMRe2dYCF5vmwtj-QKZ5vr_93d52R_t_dr-3dzyz5Vnv3a9_-b1WJidK5-tH_v_bROb-_I-9_5-_4v8_N_rE2_eT1t_tevt739-8tv_____9____7______3_-wUuar-N_-2vLf8v3v0_bI8xq_7_D33YhiDC-TZ9wLmXet-TgvvsJmaJv1bUwVMiQBdu2CQgbaOTGomqFC1RArXmHY1Js5QnaUT8DJEOYi9s6wELzfNhbH8gUzzfX_7u7zsj_b-7X9u7nlnyrPfu17_83qsTE6Vz9aP_f-2ic39-R97_z9_xf5-b_WJt-8nrb_a9fb3v795bf_____7____3______v_9gAAAA.QKXNV_G__bXlv-X736ftkeY1f9_h77sQxBhfJs-4FzLvW_JwX32EzNE36tqYKmRIAu3bBIQNtHJjUTVChaogVrzDsak2coTtKJ-BkiHMRe2dYCF5vmwtj-QKZ5vr_93d52R_t_dr-3dzyz5Vnv3a9_-b1WJidK5-tH_v_bROb-_I-9_5-_4v8_N_rE2_eT1t_tevt739-8tv_____9____7______3_-wAAA.IKXNV_G__bXlv-X736ftkeY1f9_h77sQxBhfJs-4FzLvW_JwX32EzNE36tqYKmRIAu3bBIQNtHJjUTVChaogVrzDsak2coTtKJ-BkiHMRe2dYCF5vmwtj-QKZ5vr_93d52R_t_dr-3dzyz5Vnv3a9_-b1WJidK5-tH_v_bROb-_I-9_5-_4v8_N_rE2_eT1t_tevt739-8tv_____9____7______3_-wAAA~BQCT9cAQCT9cAPoABABGBaCYAf8AAf8AAApZA9AAUABwAFQALQAaABLACgAF0AMwAbQA7gCCAEIAIoAT4ArQBbgDKAGmAOcAdwBAICSgJMAT8AzQBnQDPgGvAP4Ak8BKgCcgE_gKPAVEAqUBbwC4QF0AL3AX-AwcBmADTQG1ANxAcaA8QB5oD5AICAQkAjcBH8CUsEwATBAmuBOYCfgFJgKWApZA9AAUABwAFQALQAaABLACgAF0AMwAbQA7gCCAEIAIoAT4ArQBbgDKAGmAOcAdwBAICSgJMAT8AzQBnQDPgGvAP4Ak8BKgCcgE_gKPAVEAqUBbwC4QF0AL3AX-AwcBmADTQG1ANxAcaA8QB5oD5AICAQkAjcBH8CUsEwATBAmuBOYCfgFJgKWAAA.YAAAAAAAAAA~1---~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA"; + + @Benchmark + public void decodeGpp(Blackhole blackhole) { + GppModel gpp = new GppModel(GPP); + TcfEuV2 tcfEuV2 = gpp.getTcfEuV2Section(); + blackhole.consume(tcfEuV2.getPublisherConsents()); + blackhole.consume(tcfEuV2.getPurposeConsents()); + blackhole.consume(tcfEuV2.getVendorConsents()); + blackhole.consume(tcfEuV2.getPurposeLegitimateInterests()); + blackhole.consume(tcfEuV2.getVendorLegitimateInterests()); + blackhole.consume(tcfEuV2.getSpecialFeatureOptins()); + blackhole.consume(tcfEuV2.getCmpId()); + blackhole.consume(tcfEuV2.getPublisherRestrictions()); + TcfCaV1 tcfCaV1 = gpp.getTcfCaV1Section(); + blackhole.consume(tcfCaV1.getPubPurposesExpressConsent()); + blackhole.consume(tcfCaV1.getPubPurposesImpliedConsent()); + blackhole.consume(tcfCaV1.getVendorImpliedConsent()); + blackhole.consume(tcfCaV1.getCustomPurposesExpressConsent()); + blackhole.consume(tcfCaV1.getCustomPurposesImpliedConsent()); + blackhole.consume(tcfCaV1.getSpecialFeatureExpressConsent()); + blackhole.consume(tcfCaV1.getCmpId()); + blackhole.consume(tcfCaV1.getPubRestrictions()); + UspV1 uspV1 = gpp.getUspV1Section(); + blackhole.consume(uspV1.getLspaCovered()); + UsCaV1 usCaV1 = gpp.getUsCaV1Section(); + blackhole.consume(usCaV1.getGpc()); + blackhole.consume(usCaV1.getSaleOptOut()); + } + +} diff --git a/pom.xml b/pom.xml index 892005fc..215a8368 100644 --- a/pom.xml +++ b/pom.xml @@ -51,6 +51,7 @@ iabgpp-encoder iabgpp-extras iabgpp-extras-jackson + iabgpp-jmh From d14374d060b4f0fecb2e829f2281d1a5e76617f9 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 25 Jul 2024 23:10:33 -0400 Subject: [PATCH 002/146] zero copy split --- .../java/com/iab/gpp/encoder/GppModel.java | 10 ++-- .../base64/AbstractBase64UrlEncoder.java | 2 +- ...actEncodableSegmentedBitStringSection.java | 2 +- .../AbstractLazilyEncodableSection.java | 10 ++-- .../gpp/encoder/section/EncodableSection.java | 2 +- .../com/iab/gpp/encoder/section/HeaderV1.java | 14 ++--- .../encoder/section/SlicedCharSequence.java | 52 +++++++++++++++++++ .../com/iab/gpp/encoder/section/TcfCaV1.java | 20 +++---- .../com/iab/gpp/encoder/section/TcfEuV2.java | 22 ++++---- .../com/iab/gpp/encoder/section/UsCa.java | 16 +++--- .../com/iab/gpp/encoder/section/UsCo.java | 16 +++--- .../com/iab/gpp/encoder/section/UsCt.java | 16 +++--- .../com/iab/gpp/encoder/section/UsNat.java | 16 +++--- .../com/iab/gpp/encoder/section/UsUt.java | 14 ++--- .../com/iab/gpp/encoder/section/UsVa.java | 12 ++--- .../com/iab/gpp/encoder/section/UspV1.java | 14 ++--- .../AbstractLazilyEncodableSegment.java | 10 ++-- .../gpp/encoder/segment/EncodableSegment.java | 2 +- .../encoder/segment/HeaderV1CoreSegment.java | 4 +- .../encoder/segment/TcfCaV1CoreSegment.java | 4 +- .../TcfCaV1DisclosedVendorsSegment.java | 4 +- .../TcfCaV1PublisherPurposesSegment.java | 4 +- .../encoder/segment/TcfEuV2CoreSegment.java | 4 +- .../TcfEuV2PublisherPurposesSegment.java | 4 +- .../segment/TcfEuV2VendorsAllowedSegment.java | 4 +- .../TcfEuV2VendorsDisclosedSegment.java | 4 +- .../gpp/encoder/segment/UsCaCoreSegment.java | 4 +- .../gpp/encoder/segment/UsCaGpcSegment.java | 4 +- .../gpp/encoder/segment/UsCoCoreSegment.java | 4 +- .../gpp/encoder/segment/UsCoGpcSegment.java | 4 +- .../gpp/encoder/segment/UsCtCoreSegment.java | 4 +- .../gpp/encoder/segment/UsCtGpcSegment.java | 4 +- .../gpp/encoder/segment/UsMtGpcSegment.java | 4 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 4 +- .../gpp/encoder/segment/UsUtCoreSegment.java | 4 +- .../gpp/encoder/segment/UsVaCoreSegment.java | 4 +- .../gpp/encoder/segment/UspV1CoreSegment.java | 4 +- 37 files changed, 189 insertions(+), 137 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index a6e1eee4..6efc9c6c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -13,6 +13,7 @@ import com.iab.gpp.encoder.section.EncodableSection; import com.iab.gpp.encoder.section.HeaderV1; import com.iab.gpp.encoder.section.Sections; +import com.iab.gpp.encoder.section.SlicedCharSequence; import com.iab.gpp.encoder.section.TcfCaV1; import com.iab.gpp.encoder.section.TcfEuV2; import com.iab.gpp.encoder.section.UsCa; @@ -348,16 +349,15 @@ protected String encodeModel(Map sections) { protected Map decodeModel(String str) { if (str == null || str.isEmpty() || str.startsWith("DB")) { Map sections = new HashMap<>(); - - if (str != null && !str.isEmpty()) { - String[] encodedSections = str.split("~"); - HeaderV1 header = new HeaderV1(encodedSections[0]); + if(str != null && !str.isEmpty()) { + List encodedSections = SlicedCharSequence.split(str, '~'); + HeaderV1 header = new HeaderV1(encodedSections.get(0)); sections.put(HeaderV1.NAME, header); @SuppressWarnings("unchecked") List sectionIds = (List) header.getFieldValue("SectionIds"); for (int i = 0; i < sectionIds.size(); i++) { - String section = encodedSections[i + 1]; + CharSequence section = encodedSections.get(i + 1); switch (sectionIds.get(i)) { case TcfEuV2.ID: sections.put(TcfEuV2.NAME, new TcfEuV2(section)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index af0b2144..c2f00837 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -44,7 +44,7 @@ public String encode(String bitString) { return str.toString(); } - public BitString decode(String str) { + public BitString decode(CharSequence str) { int length = str.length(); BitStringBuilder sb = new BitStringBuilder(length * BASE64_BITS); for (int i = 0; i < length; i++) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java index 9ed03373..984538f4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java @@ -105,7 +105,7 @@ private void decodeSegmentFromBitString(String[] segment, BitString segmentBitSt public abstract String encode() throws EncodingException; @Override - public abstract void decode(String encodedString) throws DecodingException; + public abstract void decode(CharSequence encodedString) throws DecodingException; @Override public abstract int getId(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 1f31a592..917da593 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -8,7 +8,7 @@ public abstract class AbstractLazilyEncodableSection implements EncodableSection private List segments; - private String encodedString = null; + private CharSequence encodedString = null; private boolean dirty = false; private boolean decoded = true; @@ -21,7 +21,7 @@ public AbstractLazilyEncodableSection() { protected abstract String encodeSection(List segments); - protected abstract List decodeSection(String encodedString); + protected abstract List decodeSection(CharSequence encodedString); public boolean hasField(String fieldName) { if (!this.decoded) { @@ -74,16 +74,16 @@ public void setFieldValue(String fieldName, Object value) { } public String encode() { - if (this.encodedString == null || this.encodedString.isEmpty() || this.dirty) { + if (this.encodedString == null || this.encodedString.length() == 0 || this.dirty) { this.encodedString = this.encodeSection(this.segments); this.dirty = false; this.decoded = true; } - return this.encodedString; + return this.encodedString.toString(); } - public void decode(String encodedString) { + public void decode(CharSequence encodedString) { this.encodedString = encodedString; this.dirty = false; this.decoded = false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index e1f0a854..3f4caad6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -16,5 +16,5 @@ public interface EncodableSection { String encode(); - void decode(String encodedString); + void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index c4e18550..8adc4598 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -17,7 +17,7 @@ public HeaderV1() { super(); } - public HeaderV1(String encodedString) { + public HeaderV1(CharSequence encodedString) { super(); decode(encodedString); } @@ -43,15 +43,15 @@ protected List initializeSegments() { } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + if(encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for(int i=0; i i) { - segments.get(i).decode(encodedSegments[i]); + for (int i=0; i i) { + segments.get(i).decode(encodedSegments.get(i)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java new file mode 100644 index 00000000..0842b86d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -0,0 +1,52 @@ +package com.iab.gpp.encoder.section; + +import java.util.ArrayList; +import java.util.List; + +public final class SlicedCharSequence implements CharSequence { + + private final CharSequence base; + private final int start; + private final int end; + + private SlicedCharSequence(CharSequence base, int start, int end) { + this.base = base; + this.start = start; + this.end = end; + } + + public static List split(CharSequence charSequence, char splitter) { + List out = new ArrayList<>(1); + int length = charSequence.length(); + int start = 0; + for (int i = 0; i < length; i++) { + if (charSequence.charAt(i) == splitter) { + out.add(new SlicedCharSequence(charSequence, start, i)); + start = i + 1; + } + } + out.add(new SlicedCharSequence(charSequence, start, length)); + return out; + } + + @Override + public int length() { + return end - start; + } + + @Override + public char charAt(int index) { + return base.charAt(start + index); + } + + @Override + public CharSequence subSequence(int newStart, int newEnd) { + return base.subSequence(start + newStart, start + newEnd); + } + + @Override + public String toString() { + return base.subSequence(start, end).toString(); + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index add7ab2f..c3e7ba4e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -24,7 +24,7 @@ public TcfCaV1() { super(); } - public TcfCaV1(String encodedString) { + public TcfCaV1(CharSequence encodedString) { super(); decode(encodedString); } @@ -50,12 +50,12 @@ protected List initializeSegments() { } @Override - public List decodeSection(String encodedString) { + public List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); - for (int i = 0; i < encodedSegments.length; i++) { + if (encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < encodedSegments.size(); i++) { /** * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. @@ -68,16 +68,16 @@ public List decodeSection(String encodedString) { * for the encoding version which only coincidentally works here because the version value is less than 8. */ - String encodedSegment = encodedSegments[i]; - if(!encodedSegment.isEmpty()) { + CharSequence encodedSegment = encodedSegments.get(i); + if (encodedSegment.length() > 0) { char firstChar = encodedSegment.charAt(0); if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegments[i]); + segments.get(0).decode(encodedSegment); } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(2).decode(encodedSegments[i]); + segments.get(2).decode(encodedSegment); } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegments[i]); + segments.get(1).decode(encodedSegment); } else { throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index c2bf4022..f0dd66ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -25,7 +25,7 @@ public TcfEuV2() { super(); } - public TcfEuV2(String encodedString) { + public TcfEuV2(CharSequence encodedString) { super(); decode(encodedString); } @@ -51,12 +51,12 @@ protected List initializeSegments() { } @Override - public List decodeSection(String encodedString) { + public List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); - for (int i = 0; i < encodedSegments.length; i++) { + if (encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < encodedSegments.size(); i++) { /** * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. @@ -70,19 +70,19 @@ public List decodeSection(String encodedString) { * for the encoding version which only coincidentally works here because the version value is less than 8. */ - String encodedSegment = encodedSegments[i]; - if(!encodedSegment.isEmpty()) { + CharSequence encodedSegment = encodedSegments.get(i); + if (encodedSegment.length() > 0) { char firstChar = encodedSegment.charAt(0); // unfortunately, the segment ordering doesn't match the segment ids if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegments[i]); + segments.get(0).decode(encodedSegment); } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(3).decode(encodedSegments[i]); + segments.get(3).decode(encodedSegment); } else if(firstChar >= 'Q' && firstChar <= 'X') { - segments.get(2).decode(encodedSegments[i]); + segments.get(2).decode(encodedSegment); } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegments[i]); + segments.get(1).decode(encodedSegment); } else { throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 273dfcf3..a1a8cbe8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -18,7 +18,7 @@ public UsCa() { super(); } - public UsCa(String encodedString) { + public UsCa(CharSequence encodedString) { super(); decode(encodedString); } @@ -44,19 +44,19 @@ protected List initializeSegments() { } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + if (encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 46a48328..f6b8c169 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -18,7 +18,7 @@ public UsCo() { super(); } - public UsCo(String encodedString) { + public UsCo(CharSequence encodedString) { super(); decode(encodedString); } @@ -44,19 +44,19 @@ protected List initializeSegments() { } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + if (encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index f66f882a..dc328d47 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -18,7 +18,7 @@ public UsCt() { super(); } - public UsCt(String encodedString) { + public UsCt(CharSequence encodedString) { super(); decode(encodedString); } @@ -44,19 +44,19 @@ protected List initializeSegments() { } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + if (encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index f2aa096f..37c9aa66 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -18,7 +18,7 @@ public UsNat() { super(); } - public UsNat(String encodedString) { + public UsNat(CharSequence encodedString) { super(); decode(encodedString); } @@ -44,19 +44,19 @@ protected List initializeSegments() { } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + if (encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 4cbf6471..3e360e00 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -17,7 +17,7 @@ public UsUt() { super(); } - public UsUt(String encodedString) { + public UsUt(CharSequence encodedString) { super(); decode(encodedString); } @@ -43,15 +43,15 @@ protected List initializeSegments() { } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + if (encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for(int i=0; i i) { - segments.get(i).decode(encodedSegments[i]); + for (int i = 0; i < segments.size(); i++) { + if (encodedSegments.size() > i) { + segments.get(i).decode(encodedSegments.get(i)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index bf452242..6b84ee85 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -17,7 +17,7 @@ public UsVa() { super(); } - public UsVa(String encodedString) { + public UsVa(CharSequence encodedString) { super(); decode(encodedString); } @@ -43,15 +43,15 @@ protected List initializeSegments() { } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + if (encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < segments.size(); i++) { - if (encodedSegments.length > i) { - segments.get(i).decode(encodedSegments[i]); + if (encodedSegments.size() > i) { + segments.get(i).decode(encodedSegments.get(i)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index 52a2124c..eb7d8eb7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -17,7 +17,7 @@ public UspV1() { super(); } - public UspV1(String encodedString) { + public UspV1(CharSequence encodedString) { super(); decode(encodedString); } @@ -43,15 +43,15 @@ protected List initializeSegments() { } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + if (encodedString != null && encodedString.length() > 0) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for(int i=0; i i) { - segments.get(i).decode(encodedSegments[i]); + for (int i=0; i < segments.size(); i++) { + if (encodedSegments.size() > i) { + segments.get(i).decode(encodedSegments.get(i)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index ed3af425..efa895d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -8,7 +8,7 @@ public abstract class AbstractLazilyEncodableSegment> implem protected T fields; - private String encodedString = null; + private CharSequence encodedString = null; private boolean dirty = false; private boolean decoded = true; @@ -21,7 +21,7 @@ public AbstractLazilyEncodableSegment() { protected abstract String encodeSegment(T fields); - protected abstract void decodeSegment(String encodedString, T Fields); + protected abstract void decodeSegment(CharSequence encodedString, T Fields); public boolean hasField(String fieldName) { return this.fields.containsKey(fieldName); @@ -59,17 +59,17 @@ public void setFieldValue(String fieldName, Object value) { } public String encode() { - if (this.encodedString == null || this.encodedString.isEmpty() || this.dirty) { + if (this.encodedString == null || this.encodedString.length() == 0 || this.dirty) { this.validate(); this.encodedString = encodeSegment(this.fields); this.dirty = false; this.decoded = true; } - return this.encodedString; + return this.encodedString.toString(); } - public void decode(String encodedString) { + public void decode(CharSequence encodedString) { this.encodedString = encodedString; this.dirty = false; this.decoded = false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index d2363a82..f4b4a354 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -14,7 +14,7 @@ public interface EncodableSegment { String encode(); - void decode(String encodedString); + void decode(CharSequence encodedString); default void validate() {}; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 29b88d21..5b7ed002 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -49,8 +49,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index aef32362..ab1a1608 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -70,8 +70,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 2a040523..0f7c6f37 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -47,8 +47,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 7a9cc0b5..2fe380c6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -68,8 +68,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 2c6a147f..69e1561c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -74,8 +74,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index cf09ab53..01b2551a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -68,8 +68,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index cbdce7c3..3dc7ac7d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -47,8 +47,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index b76bf89b..ef980464 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -47,8 +47,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 0dcf9344..c2120771 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -82,8 +82,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index c6ea185b..c36facaf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -47,8 +47,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 5e504036..c2e8952b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -79,8 +79,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index e8104b93..98c94849 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -47,8 +47,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index f76d0a3c..bffc4a1b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -80,8 +80,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index ae3717c9..73c8018c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -47,8 +47,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 2938ae64..e01c5021 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -47,8 +47,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 9f53912a..62ae2208 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -90,8 +90,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index d5acc065..9ba5b8e1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -82,8 +82,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 82eb17c8..923626f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -80,8 +80,8 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 25136157..68f354dd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -45,13 +45,13 @@ protected String encodeSegment(GenericFields fields) { } @Override - protected void decodeSegment(String encodedString, GenericFields fields) { + protected void decodeSegment(CharSequence encodedString, GenericFields fields) { if (encodedString == null || encodedString.length() != 4) { throw new DecodingException("Invalid uspv1 string: '" + encodedString + "'"); } try { - fields.get(UspV1Field.VERSION).setValue(Integer.parseInt(encodedString.substring(0, 1))); + fields.get(UspV1Field.VERSION).setValue((int)(encodedString.charAt(0) - '0')); fields.get(UspV1Field.NOTICE).setValue(encodedString.charAt(1)); fields.get(UspV1Field.OPT_OUT_SALE).setValue(encodedString.charAt(2)); fields.get(UspV1Field.LSPA_COVERED).setValue(encodedString.charAt(3)); From f7b9f73fff4714738f32bfe2ff67abd9b608d51a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 5 Nov 2024 19:27:42 -0500 Subject: [PATCH 003/146] optimize fl,mt,or,tx --- .../com/iab/gpp/encoder/field/UsFlField.java | 26 +++++++-------- .../com/iab/gpp/encoder/field/UsMtField.java | 32 +++++++++---------- .../com/iab/gpp/encoder/field/UsOrField.java | 32 +++++++++---------- .../com/iab/gpp/encoder/field/UsTxField.java | 32 +++++++++---------- .../com/iab/gpp/encoder/section/UsFl.java | 23 +++++++------ .../com/iab/gpp/encoder/section/UsMt.java | 22 ++++++------- .../com/iab/gpp/encoder/section/UsOr.java | 28 ++++++++-------- .../com/iab/gpp/encoder/section/UsTx.java | 28 ++++++++-------- .../gpp/encoder/segment/UsFlCoreSegment.java | 9 +++--- .../gpp/encoder/segment/UsMtCoreSegment.java | 9 +++--- .../gpp/encoder/segment/UsNatGpcSegment.java | 7 ++-- .../gpp/encoder/segment/UsOrCoreSegment.java | 9 +++--- .../gpp/encoder/segment/UsOrGpcSegment.java | 9 +++--- .../gpp/encoder/segment/UsTxCoreSegment.java | 9 +++--- .../gpp/encoder/segment/UsTxGpcSegment.java | 9 +++--- 15 files changed, 143 insertions(+), 141 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index f3647a79..9c19f6cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -5,21 +5,21 @@ public class UsFlField { - public static String VERSION = "Version"; - public static String PROCESSING_NOTICE = "ProcessingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String PROCESSING_NOTICE = "ProcessingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; //@formatter:off - public static List USFL_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USFL_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsFlField.VERSION, UsFlField.PROCESSING_NOTICE, UsFlField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 6b785f73..42243e83 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -5,25 +5,25 @@ public class UsMtField { - public static String VERSION = "Version"; - public static String SHARING_NOTICE = "SharingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String SHARING_NOTICE = "SharingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USMT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USMT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsMtField.VERSION, UsMtField.SHARING_NOTICE, UsMtField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index 3e9021c2..a1ea3d6d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -5,25 +5,25 @@ public class UsOrField { - public static String VERSION = "Version"; - public static String PROCESSING_NOTICE = "ProcessingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String PROCESSING_NOTICE = "ProcessingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USOR_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USOR_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsOrField.VERSION, UsOrField.PROCESSING_NOTICE, UsOrField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 44ec7d69..413b0167 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -5,25 +5,25 @@ public class UsTxField { - public static String VERSION = "Version"; - public static String PROCESSING_NOTICE = "ProcessingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String PROCESSING_NOTICE = "ProcessingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USTX_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USTX_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsTxField.VERSION, UsTxField.PROCESSING_NOTICE, UsTxField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 8c568479..2141ded9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -8,15 +9,15 @@ public class UsFl extends AbstractLazilyEncodableSection { - public static int ID = 13; - public static int VERSION = 1; - public static String NAME = "usfl"; + public static final int ID = 13; + public static final int VERSION = 1; + public static final String NAME = "usfl"; public UsFl() { super(); } - public UsFl(String encodedString) { + public UsFl(CharSequence encodedString) { super(); decode(encodedString); } @@ -38,21 +39,19 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsFlCoreSegment()); - return segments; + return Collections.singletonList(new UsFlCoreSegment()); } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < segments.size(); i++) { - if (encodedSegments.length > i) { - segments.get(i).decode(encodedSegments[i]); + if (encodedSegments.size() > i) { + segments.get(i).decode(encodedSegments.get(i)); } } } @@ -62,7 +61,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); for (EncodableSegment segment : segments) { encodedSegments.add(segment.encode()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index faf5a235..0f0a8d9e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -9,15 +9,15 @@ public class UsMt extends AbstractLazilyEncodableSection { - public static int ID = 14; - public static int VERSION = 1; - public static String NAME = "usmt"; + public static final int ID = 14; + public static final int VERSION = 1; + public static final String NAME = "usmt"; public UsMt() { super(); } - public UsMt(String encodedString) { + public UsMt(CharSequence encodedString) { super(); decode(encodedString); } @@ -46,19 +46,19 @@ protected List initializeSegments() { } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); } @@ -69,7 +69,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 632e455f..cb11263d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.section; +import java.util.Arrays; import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.field.UsOrField; @@ -9,15 +10,15 @@ public class UsOr extends AbstractLazilyEncodableSection { - public static int ID = 15; - public static int VERSION = 1; - public static String NAME = "usor"; + public static final int ID = 15; + public static final int VERSION = 1; + public static final String NAME = "usor"; public UsOr() { super(); } - public UsOr(String encodedString) { + public UsOr(CharSequence encodedString) { super(); decode(encodedString); } @@ -39,26 +40,23 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsOrCoreSegment()); - segments.add(new UsOrGpcSegment()); - return segments; + return Arrays.asList(new UsOrCoreSegment(), new UsOrGpcSegment()); } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); } @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index ea4fc86e..c1ff2d1f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.section; +import java.util.Arrays; import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.field.UsTxField; @@ -9,15 +10,15 @@ public class UsTx extends AbstractLazilyEncodableSection { - public static int ID = 16; - public static int VERSION = 1; - public static String NAME = "ustx"; + public static final int ID = 16; + public static final int VERSION = 1; + public static final String NAME = "ustx"; public UsTx() { super(); } - public UsTx(String encodedString) { + public UsTx(CharSequence encodedString) { super(); decode(encodedString); } @@ -39,26 +40,23 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsTxCoreSegment()); - segments.add(new UsTxGpcSegment()); - return segments; + return Arrays.asList(new UsTxCoreSegment(), new UsTxGpcSegment()); } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); } @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 02c480aa..19da27f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -22,7 +23,7 @@ public UsFlCoreSegment() { super(); } - public UsFlCoreSegment(String encodedString) { + public UsFlCoreSegment(CharSequence encodedString) { super(); this.decode(encodedString); } @@ -81,12 +82,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsFlCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 4daa1872..117aae94 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -22,7 +23,7 @@ public UsMtCoreSegment() { super(); } - public UsMtCoreSegment(String encodedString) { + public UsMtCoreSegment(CharSequence encodedString) { super(); this.decode(encodedString); } @@ -81,12 +82,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsMtCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 54fc1d40..3f5b9044 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -46,12 +47,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNatGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index c09ebd15..188c0ac0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -22,7 +23,7 @@ public UsOrCoreSegment() { super(); } - public UsOrCoreSegment(String encodedString) { + public UsOrCoreSegment(CharSequence encodedString) { super(); this.decode(encodedString); } @@ -81,12 +82,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsOrCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 6818e7de..ede06795 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -19,7 +20,7 @@ public UsOrGpcSegment() { super(); } - public UsOrGpcSegment(String encodedString) { + public UsOrGpcSegment(CharSequence encodedString) { super(); this.decode(encodedString); } @@ -46,12 +47,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsOrGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 53463d20..3f8666c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -23,7 +24,7 @@ public UsTxCoreSegment() { super(); } - public UsTxCoreSegment(String encodedString) { + public UsTxCoreSegment(CharSequence encodedString) { super(); this.decode(encodedString); } @@ -82,12 +83,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsTxCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index df936b51..8140f7b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -19,7 +20,7 @@ public UsTxGpcSegment() { super(); } - public UsTxGpcSegment(String encodedString) { + public UsTxGpcSegment(CharSequence encodedString) { super(); this.decode(encodedString); } @@ -46,12 +47,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsTxGpcSegment '" + encodedString + "'", e); From 8595a964a78fa93d0fa386e26f3574b826349543 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 6 Nov 2024 08:19:17 -0500 Subject: [PATCH 004/146] update mt --- .../src/main/java/com/iab/gpp/encoder/section/UsMt.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 0f0a8d9e..9197da64 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.section; +import java.util.Arrays; import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.field.UsMtField; @@ -39,10 +40,7 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsMtCoreSegment()); - segments.add(new UsMtGpcSegment()); - return segments; + return Arrays.asList(new UsMtCoreSegment(), new UsMtGpcSegment()); } @Override From f3f8c3fd735cd6d724091d88341647d6da54f950 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 9 Dec 2024 15:14:50 -0500 Subject: [PATCH 005/146] remove microbenchmarking --- iabgpp-jmh/pom.xml | 144 ------------------ .../java/com/iab/gpp/encoder/MyBenchmark.java | 41 ----- pom.xml | 1 - 3 files changed, 186 deletions(-) delete mode 100644 iabgpp-jmh/pom.xml delete mode 100644 iabgpp-jmh/src/main/java/com/iab/gpp/encoder/MyBenchmark.java diff --git a/iabgpp-jmh/pom.xml b/iabgpp-jmh/pom.xml deleted file mode 100644 index 4202540a..00000000 --- a/iabgpp-jmh/pom.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - 4.0.0 - - com.iabgpp - iabgpp-core - 3.2.1-SNAPSHOT - - - iabgpp-jmh - jar - - JMH benchmark - - - - org.openjdk.jmh - jmh-core - ${jmh.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - provided - - - com.iabgpp - iabgpp-encoder - 3.2.1-SNAPSHOT - - - - - UTF-8 - - - 1.37 - - - 1.8 - - - benchmarks - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.0 - - ${javac.target} - ${javac.target} - ${javac.target} - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.1 - - - package - - shade - - - ${uberjar.name} - - - org.openjdk.jmh.Main - - - - - - - *:* - - META-INF/*.SF - META-INF/*.DSA - META-INF/*.RSA - - - - - - - - - - - - maven-clean-plugin - 2.5 - - - maven-deploy-plugin - 2.8.1 - - - maven-install-plugin - 2.5.1 - - - maven-jar-plugin - 2.4 - - - maven-javadoc-plugin - 2.9.1 - - - maven-resources-plugin - 2.6 - - - maven-site-plugin - 3.3 - - - maven-source-plugin - 2.2.1 - - - maven-surefire-plugin - 2.17 - - - - - - diff --git a/iabgpp-jmh/src/main/java/com/iab/gpp/encoder/MyBenchmark.java b/iabgpp-jmh/src/main/java/com/iab/gpp/encoder/MyBenchmark.java deleted file mode 100644 index 2111b9ef..00000000 --- a/iabgpp-jmh/src/main/java/com/iab/gpp/encoder/MyBenchmark.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.iab.gpp.encoder; - -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.infra.Blackhole; -import com.iab.gpp.encoder.section.TcfCaV1; -import com.iab.gpp.encoder.section.TcfEuV2; -import com.iab.gpp.encoder.section.UsCaV1; -import com.iab.gpp.encoder.section.UspV1; - -public class MyBenchmark { - private static final String GPP = "DBADOfdg~CQCT9cAQCT9cAPoABABGA-EMAP_gAP_gAAAAKXNV_G__bXlv-X736ftkeY1f9_h77sQxBhfJs-4FzLvW_JwX32EzNE36tqYKmRIAu3bBIQNtHJjUTVChaogVrzDsak2coTtKJ-BkiHMRe2dYCF5vmwtj-QKZ5vr_93d52R_t_dr-3dzyz5Vnv3a9_-b1WJidK5-tH_v_bROb-_I-9_5-_4v8_N_rE2_eT1t_tevt739-8tv_____9____7______3_-wUuar-N_-2vLf8v3v0_bI8xq_7_D33YhiDC-TZ9wLmXet-TgvvsJmaJv1bUwVMiQBdu2CQgbaOTGomqFC1RArXmHY1Js5QnaUT8DJEOYi9s6wELzfNhbH8gUzzfX_7u7zsj_b-7X9u7nlnyrPfu17_83qsTE6Vz9aP_f-2ic39-R97_z9_xf5-b_WJt-8nrb_a9fb3v795bf_____7____3______v_9gAAAA.QKXNV_G__bXlv-X736ftkeY1f9_h77sQxBhfJs-4FzLvW_JwX32EzNE36tqYKmRIAu3bBIQNtHJjUTVChaogVrzDsak2coTtKJ-BkiHMRe2dYCF5vmwtj-QKZ5vr_93d52R_t_dr-3dzyz5Vnv3a9_-b1WJidK5-tH_v_bROb-_I-9_5-_4v8_N_rE2_eT1t_tevt739-8tv_____9____7______3_-wAAA.IKXNV_G__bXlv-X736ftkeY1f9_h77sQxBhfJs-4FzLvW_JwX32EzNE36tqYKmRIAu3bBIQNtHJjUTVChaogVrzDsak2coTtKJ-BkiHMRe2dYCF5vmwtj-QKZ5vr_93d52R_t_dr-3dzyz5Vnv3a9_-b1WJidK5-tH_v_bROb-_I-9_5-_4v8_N_rE2_eT1t_tevt739-8tv_____9____7______3_-wAAA~BQCT9cAQCT9cAPoABABGBaCYAf8AAf8AAApZA9AAUABwAFQALQAaABLACgAF0AMwAbQA7gCCAEIAIoAT4ArQBbgDKAGmAOcAdwBAICSgJMAT8AzQBnQDPgGvAP4Ak8BKgCcgE_gKPAVEAqUBbwC4QF0AL3AX-AwcBmADTQG1ANxAcaA8QB5oD5AICAQkAjcBH8CUsEwATBAmuBOYCfgFJgKWApZA9AAUABwAFQALQAaABLACgAF0AMwAbQA7gCCAEIAIoAT4ArQBbgDKAGmAOcAdwBAICSgJMAT8AzQBnQDPgGvAP4Ak8BKgCcgE_gKPAVEAqUBbwC4QF0AL3AX-AwcBmADTQG1ANxAcaA8QB5oD5AICAQkAjcBH8CUsEwATBAmuBOYCfgFJgKWAAA.YAAAAAAAAAA~1---~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA"; - - @Benchmark - public void decodeGpp(Blackhole blackhole) { - GppModel gpp = new GppModel(GPP); - TcfEuV2 tcfEuV2 = gpp.getTcfEuV2Section(); - blackhole.consume(tcfEuV2.getPublisherConsents()); - blackhole.consume(tcfEuV2.getPurposeConsents()); - blackhole.consume(tcfEuV2.getVendorConsents()); - blackhole.consume(tcfEuV2.getPurposeLegitimateInterests()); - blackhole.consume(tcfEuV2.getVendorLegitimateInterests()); - blackhole.consume(tcfEuV2.getSpecialFeatureOptins()); - blackhole.consume(tcfEuV2.getCmpId()); - blackhole.consume(tcfEuV2.getPublisherRestrictions()); - TcfCaV1 tcfCaV1 = gpp.getTcfCaV1Section(); - blackhole.consume(tcfCaV1.getPubPurposesExpressConsent()); - blackhole.consume(tcfCaV1.getPubPurposesImpliedConsent()); - blackhole.consume(tcfCaV1.getVendorImpliedConsent()); - blackhole.consume(tcfCaV1.getCustomPurposesExpressConsent()); - blackhole.consume(tcfCaV1.getCustomPurposesImpliedConsent()); - blackhole.consume(tcfCaV1.getSpecialFeatureExpressConsent()); - blackhole.consume(tcfCaV1.getCmpId()); - blackhole.consume(tcfCaV1.getPubRestrictions()); - UspV1 uspV1 = gpp.getUspV1Section(); - blackhole.consume(uspV1.getLspaCovered()); - UsCaV1 usCaV1 = gpp.getUsCaV1Section(); - blackhole.consume(usCaV1.getGpc()); - blackhole.consume(usCaV1.getSaleOptOut()); - } - -} diff --git a/pom.xml b/pom.xml index 215a8368..892005fc 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,6 @@ iabgpp-encoder iabgpp-extras iabgpp-extras-jackson - iabgpp-jmh From 165d8ec8e03a13dab85646762112d97aa55492dc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 5 Mar 2025 17:41:09 -0500 Subject: [PATCH 006/146] fewer substrings --- .../datatype/EncodableFibonacciIntegerRange.java | 2 +- .../datatype/EncodableFixedIntegerRange.java | 2 +- .../datatype/EncodableOptimizedFibonacciRange.java | 2 +- .../datatype/EncodableOptimizedFixedRange.java | 2 +- .../datatype/encoder/FibonacciIntegerEncoder.java | 13 ++++++++++--- .../encoder/FibonacciIntegerRangeEncoder.java | 6 +++--- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 8ae29eac..87968aca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -44,7 +44,7 @@ public void decode(BitString bitString) { public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { - int count = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 12)); + int count = FixedIntegerEncoder.decode(bitString, fromIndex, 12); int index = fromIndex + 12; for (int i = 0; i < count; i++) { if (bitString.getValue(index)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index c4e51491..4cc22a56 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -44,7 +44,7 @@ public void decode(BitString bitString) { public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { - int count = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 12)); + int count = FixedIntegerEncoder.decode(bitString, fromIndex, 12); int index = fromIndex + 12; for (int i = 0; i < count; i++) { if (bitString.getValue(index)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java index a19f488d..b1ba1b7a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java @@ -45,7 +45,7 @@ public void decode(BitString bitString) { public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { - int max = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 16)); + int max = FixedIntegerEncoder.decode(bitString, fromIndex, 16); if (bitString.getValue(fromIndex + 16)) { BitStringBuilder out = new BitStringBuilder(); out.append(bitString.substring(fromIndex, fromIndex + 17)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 10848072..ab9e486f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -46,7 +46,7 @@ public void decode(BitString bitString) { public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { - int max = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 16)); + int max = FixedIntegerEncoder.decode(bitString, fromIndex, 16); if (bitString.getValue(fromIndex + 16)) { BitStringBuilder out = new BitStringBuilder(); out.append(bitString.substring(fromIndex, fromIndex + 17)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index d6e8d5ae..42d65f86 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -39,13 +39,19 @@ public static String encode(int value) { } public static int decode(BitString bitString) throws DecodingException { + return decode(bitString, 0, bitString.length()); + } + + public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { int length = bitString.length(); // enforce a length restriction to avoid overflows // 2^16 has a bit string length of 24 if (length > 24) { throw new DecodingException("FibonacciInteger too long"); } - if (length < 2 || bitString.indexOf("11") != length - 2) { + // must end with "11" + int end = fromIndex + length; + if (length < 2 || !bitString.get(end - 2) || !bitString.get(end - 1)) { throw new DecodingException("Undecodable FibonacciInteger '" + bitString + "'"); } @@ -62,8 +68,9 @@ public static int decode(BitString bitString) throws DecodingException { } } - for (int i = 0; i < length - 1; i++) { - if (bitString.getValue(i)) { + int limit = length - 1; + for (int i = 0; i < limit; i++) { + if (bitString.getValue(fromIndex + i)) { value += fib.get(i); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index fa2b0920..118248ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -60,12 +60,12 @@ public static List decode(BitString bitString) throws DecodingException if (group == true) { int index = bitString.indexOf("11", startIndex); - int start = FibonacciIntegerEncoder.decode(bitString.substring(startIndex, index + 2)) + offset; + int start = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = start; startIndex = index + 2; index = bitString.indexOf("11", startIndex); - int end = FibonacciIntegerEncoder.decode(bitString.substring(startIndex, index + 2)) + offset; + int end = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = end; startIndex = index + 2; @@ -78,7 +78,7 @@ public static List decode(BitString bitString) throws DecodingException } } else { int index = bitString.indexOf("11", startIndex); - int val = FibonacciIntegerEncoder.decode(bitString.substring(startIndex, index + 2)) + offset; + int val = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = val; value.add(IntegerCache.valueOf(val)); startIndex = index + 2; From 564bda1394c1a19c30e5a1d4ac95978b8a77a5d8 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 5 Mar 2025 17:54:32 -0500 Subject: [PATCH 007/146] fibonacci optimization optimize fibonacci encoding clean up overflow validation optimize fibonacci end tag finding cache fibonacci numbers and enforce limit --- .../iab/gpp/encoder/bitstring/BitString.java | 20 ---- .../datatype/EncodableFibonacciInteger.java | 2 +- .../EncodableFibonacciIntegerRange.java | 5 +- .../encoder/FibonacciIntegerEncoder.java | 91 +++++++++++-------- .../encoder/FibonacciIntegerRangeEncoder.java | 6 +- .../encoder/FibonacciIntegerEncoderTest.java | 12 ++- 6 files changed, 70 insertions(+), 66 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 4f90c50d..8232262d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -92,26 +92,6 @@ public BitString substring(int newFrom, int newTo) { return new BitString(bitSet, oldFrom + newFrom, oldFrom + newTo); } - public int indexOf(String string) { - return indexOf(string, 0); - } - - public int indexOf(String string, int startIndex) { - int stringLength = string.length(); - for (int i = startIndex, to = this.to; i < to; i++) { - int match = 0; - for (int j = 0; j < stringLength; j++) { - if ((string.charAt(j) == TRUE) == bitSet.get(from + i + j)) { - match++; - } - } - if (match == stringLength) { - return i; - } - } - return -1; - } - public boolean isEmpty() { return length() == 0; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 0926402e..8e90199b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -39,7 +39,7 @@ public void decode(BitString bitString) { public BitString substring(BitString bitString, int fromIndex) throws SubstringException { try { - int index = bitString.indexOf("11", fromIndex); + int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, fromIndex); if (index > 0) { return bitString.substring(fromIndex, index + 2); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 87968aca..42c40eb0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -5,6 +5,7 @@ import java.util.TreeSet; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; @@ -48,9 +49,9 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE int index = fromIndex + 12; for (int i = 0; i < count; i++) { if (bitString.getValue(index)) { - index = bitString.indexOf("11", bitString.indexOf("11", index + 1) + 2) + 2; + index = FibonacciIntegerEncoder.indexOfEndTag(bitString, FibonacciIntegerEncoder.indexOfEndTag(bitString, index + 1) + 2) + 2; } else { - index = bitString.indexOf("11", index + 1) + 2; + index = FibonacciIntegerEncoder.indexOfEndTag(bitString, index + 1) + 2; } } return bitString.substring(fromIndex, index); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 42d65f86..eedc95ba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -1,32 +1,43 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.ArrayList; -import java.util.List; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; public class FibonacciIntegerEncoder { - public static String encode(int value) { - List fib = new ArrayList(); - if (value >= 1) { - fib.add(1); - - if (value >= 2) { - fib.add(2); + // this is the length of the longest fibonacci encoded string of all 1's + // which does not overflow a 32-bit integer + private static final int FIBONACCI_LIMIT = 42; + private static final int[] FIBONACCI_NUMBERS = new int[FIBONACCI_LIMIT]; + static { + for (int i = 0; i < FIBONACCI_LIMIT; i++) { + if (i == 0) { + FIBONACCI_NUMBERS[i] = 1; + } else if (i == 1) { + FIBONACCI_NUMBERS[i] = 2; + } else { + FIBONACCI_NUMBERS[i] = FIBONACCI_NUMBERS[i - 1] + FIBONACCI_NUMBERS[i - 2]; + } + } + } - int i = 2; - while (value >= fib.get(i - 1) + fib.get(i - 2)) { - fib.add(fib.get(i - 1) + fib.get(i - 2)); - i++; - } + public static String encode(int value) { + int largestIndex = 0; + for (int i = 0; i < FIBONACCI_LIMIT; i++) { + if (value >= FIBONACCI_NUMBERS[i]) { + largestIndex++; + } else { + break; } } + if (largestIndex == FIBONACCI_LIMIT) { + throw new EncodingException("Unencodable FibonacciInteger " + value); + } String bitString = BitString.TRUE_STRING; - for (int i = fib.size() - 1; i >= 0; i--) { - int f = fib.get(i); + for (int i = largestIndex - 1; i >= 0; i--) { + int f = FIBONACCI_NUMBERS[i]; if (value >= f) { bitString = BitString.TRUE_STRING + bitString; value -= f; @@ -43,37 +54,41 @@ public static int decode(BitString bitString) throws DecodingException { } public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { - int length = bitString.length(); - // enforce a length restriction to avoid overflows - // 2^16 has a bit string length of 24 - if (length > 24) { - throw new DecodingException("FibonacciInteger too long"); - } // must end with "11" + int limit = length - 1; int end = fromIndex + length; - if (length < 2 || !bitString.get(end - 2) || !bitString.get(end - 1)) { + // must not overflow and must end with "11" + if (length < 2 || limit > FIBONACCI_LIMIT || !bitString.getValue(end - 2) || !bitString.getValue(end - 1)) { throw new DecodingException("Undecodable FibonacciInteger '" + bitString + "'"); } int value = 0; - - List fib = new ArrayList<>(length); - for (int i = 0; i < length - 1; i++) { - if (i == 0) { - fib.add(1); - } else if (i == 1) { - fib.add(2); - } else { - fib.add(fib.get(i - 1) + fib.get(i - 2)); - } - } - - int limit = length - 1; for (int i = 0; i < limit; i++) { if (bitString.getValue(fromIndex + i)) { - value += fib.get(i); + value += FIBONACCI_NUMBERS[i]; } } return value; } + + public static int indexOfEndTag(BitString bitString, int fromIndex) { + int limit = bitString.length() - 1; + int i = fromIndex; + while (i < limit) { + if (bitString.getValue(i)) { + // 1X + if (bitString.getValue(i + 1)) { + // 11 + return i; + } else { + // 10, the next can be skipped + i += 2; + } + } else { + // 0, next + i++; + } + } + return -1; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 118248ed..c74be86a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -59,12 +59,12 @@ public static List decode(BitString bitString) throws DecodingException startIndex++; if (group == true) { - int index = bitString.indexOf("11", startIndex); + int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); int start = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = start; startIndex = index + 2; - index = bitString.indexOf("11", startIndex); + index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); int end = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = end; startIndex = index + 2; @@ -77,7 +77,7 @@ public static List decode(BitString bitString) throws DecodingException value.add(IntegerCache.valueOf(j)); } } else { - int index = bitString.indexOf("11", startIndex); + int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); int val = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = val; value.add(IntegerCache.valueOf(val)); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 696d1488..fc4accad 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; public class FibonacciIntegerEncoderTest { @@ -38,6 +39,12 @@ public void testEncode7() { Assertions.assertEquals("01011", FibonacciIntegerEncoder.encode(7)); } + @Test + public void testEncodeTooLarge() { + Assertions.assertThrows(EncodingException.class, () -> + FibonacciIntegerEncoder.encode(Integer.MAX_VALUE)); + } + @Test public void testDecode1() throws DecodingException { Assertions.assertEquals(1, FibonacciIntegerEncoder.decode(BitString.of("11"))); @@ -105,7 +112,8 @@ public void testDecode10() { @Test public void testDecodeTooLarge() { - String large = FibonacciIntegerEncoder.encode(2 << 17); - assertThrows(DecodingException.class, () -> FibonacciIntegerEncoder.decode(large)); + Assertions.assertThrows(DecodingException.class, () -> + FibonacciIntegerEncoder.decode(BitString.of("0001010001000101001000001001000100001000100011"))); } + } From 0c9a10f66227ed2f21a679f47a428394e9e3c2ba Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 5 Mar 2025 18:13:15 -0500 Subject: [PATCH 008/146] annotate tests --- .../datatype/encoder/FibonacciIntegerEncoderTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index fc4accad..b63c7649 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -15,26 +15,32 @@ public void testEncode1() { Assertions.assertEquals("11", FibonacciIntegerEncoder.encode(1)); } + @Test public void testEncode2() { Assertions.assertEquals("011", FibonacciIntegerEncoder.encode(2)); } + @Test public void testEncode3() { Assertions.assertEquals("0011", FibonacciIntegerEncoder.encode(3)); } + @Test public void testEncode4() { Assertions.assertEquals("1011", FibonacciIntegerEncoder.encode(4)); } + @Test public void testEncode5() { Assertions.assertEquals("00011", FibonacciIntegerEncoder.encode(5)); } + @Test public void testEncode6() { Assertions.assertEquals("10011", FibonacciIntegerEncoder.encode(6)); } + @Test public void testEncode7() { Assertions.assertEquals("01011", FibonacciIntegerEncoder.encode(7)); } From 68788e1c235f04330c641ec3204516594ee767c4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 5 Mar 2025 18:29:54 -0500 Subject: [PATCH 009/146] loop variables --- .../gpp/encoder/datatype/encoder/FixedIntegerEncoder.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index 63661890..a2b3d437 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -38,8 +38,9 @@ public static int decode(BitString bitString) throws DecodingException { public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { int value = 0; + int base = fromIndex + length - 1; for (int i = 0; i < length; i++) { - if (bitString.getValue(fromIndex + length - (i + 1))) { + if (bitString.getValue(base - i)) { value += 1 << i; } } @@ -50,8 +51,9 @@ public static int decode(BitString bitString, int fromIndex, int length) throws public static int decode(String bitString, int fromIndex, int length) throws DecodingException { int value = 0; + int base = fromIndex + length - 1; for (int i = 0; i < length; i++) { - char c = bitString.charAt(fromIndex + length - (i + 1)); + char c = bitString.charAt(base - i); if (c == BitString.TRUE) { value += 1 << i; } else if (c != BitString.FALSE) { From a79dc78542b4d4d915310f15d61bcadc25bd0427 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 24 Mar 2025 17:06:25 -0400 Subject: [PATCH 010/146] DI IA NE NH NJ TN --- .../com/iab/gpp/encoder/field/UsDeField.java | 34 +++++++++---------- .../com/iab/gpp/encoder/field/UsIaField.java | 34 +++++++++---------- .../com/iab/gpp/encoder/field/UsNeField.java | 34 +++++++++---------- .../com/iab/gpp/encoder/field/UsNhField.java | 34 +++++++++---------- .../com/iab/gpp/encoder/field/UsNjField.java | 34 +++++++++---------- .../com/iab/gpp/encoder/field/UsTnField.java | 34 +++++++++---------- .../com/iab/gpp/encoder/section/UsDe.java | 32 ++++++++--------- .../com/iab/gpp/encoder/section/UsIa.java | 32 ++++++++--------- .../com/iab/gpp/encoder/section/UsNe.java | 30 ++++++++-------- .../com/iab/gpp/encoder/section/UsNh.java | 30 ++++++++-------- .../com/iab/gpp/encoder/section/UsNj.java | 30 ++++++++-------- .../com/iab/gpp/encoder/section/UsTn.java | 28 +++++++-------- .../gpp/encoder/segment/UsDeCoreSegment.java | 7 ++-- .../gpp/encoder/segment/UsDeGpcSegment.java | 7 ++-- .../gpp/encoder/segment/UsIaCoreSegment.java | 7 ++-- .../gpp/encoder/segment/UsIaGpcSegment.java | 7 ++-- .../gpp/encoder/segment/UsNeCoreSegment.java | 7 ++-- .../gpp/encoder/segment/UsNeGpcSegment.java | 7 ++-- .../gpp/encoder/segment/UsNhCoreSegment.java | 7 ++-- .../gpp/encoder/segment/UsNhGpcSegment.java | 7 ++-- .../gpp/encoder/segment/UsNjCoreSegment.java | 7 ++-- .../gpp/encoder/segment/UsNjGpcSegment.java | 7 ++-- .../gpp/encoder/segment/UsTnCoreSegment.java | 7 ++-- .../gpp/encoder/segment/UsTnGpcSegment.java | 5 +-- 24 files changed, 234 insertions(+), 234 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 2979f9b6..7f5ca3ef 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -5,25 +5,25 @@ public class UsDeField { - public static String VERSION = "Version"; - public static String PROCESSING_NOTICE = "ProcessingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String PROCESSING_NOTICE = "ProcessingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USDE_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USDE_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsDeField.VERSION, UsDeField.PROCESSING_NOTICE, UsDeField.SALE_OPT_OUT_NOTICE, @@ -40,7 +40,7 @@ public class UsDeField { //@formatter:on //@formatter:off - public static List USDE_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USDE_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsDeField.GPC_SEGMENT_TYPE, UsDeField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index f0c8d523..4f9ceccb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -5,25 +5,25 @@ public class UsIaField { - public static String VERSION = "Version"; - public static String PROCESSING_NOTICE = "ProcessingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SENSITIVE_DATA_OPT_OUT_NOTICE = "SensitiveDataOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String PROCESSING_NOTICE = "ProcessingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SENSITIVE_DATA_OPT_OUT_NOTICE = "SensitiveDataOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USIA_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USIA_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsIaField.VERSION, UsIaField.PROCESSING_NOTICE, UsIaField.SALE_OPT_OUT_NOTICE, @@ -40,7 +40,7 @@ public class UsIaField { //@formatter:on //@formatter:off - public static List USIA_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USIA_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsIaField.GPC_SEGMENT_TYPE, UsIaField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index a4479a87..6f4735a1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -5,25 +5,25 @@ public class UsNeField { - public static String VERSION = "Version"; - public static String PROCESSING_NOTICE = "ProcessingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String PROCESSING_NOTICE = "ProcessingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USNE_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USNE_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsNeField.VERSION, UsNeField.PROCESSING_NOTICE, UsNeField.SALE_OPT_OUT_NOTICE, @@ -40,7 +40,7 @@ public class UsNeField { //@formatter:on //@formatter:off - public static List USNE_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USNE_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsNeField.GPC_SEGMENT_TYPE, UsNeField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 8381dc9b..08e73299 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -5,25 +5,25 @@ public class UsNhField { - public static String VERSION = "Version"; - public static String PROCESSING_NOTICE = "ProcessingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String PROCESSING_NOTICE = "ProcessingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USNH_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USNH_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsNhField.VERSION, UsNhField.PROCESSING_NOTICE, UsNhField.SALE_OPT_OUT_NOTICE, @@ -40,7 +40,7 @@ public class UsNhField { //@formatter:on //@formatter:off - public static List USNH_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USNH_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsNhField.GPC_SEGMENT_TYPE, UsNhField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 2acba850..da4c4ca3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -5,25 +5,25 @@ public class UsNjField { - public static String VERSION = "Version"; - public static String PROCESSING_NOTICE = "ProcessingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String PROCESSING_NOTICE = "ProcessingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USNJ_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USNJ_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsNjField.VERSION, UsNjField.PROCESSING_NOTICE, UsNjField.SALE_OPT_OUT_NOTICE, @@ -40,7 +40,7 @@ public class UsNjField { //@formatter:on //@formatter:off - public static List USNJ_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USNJ_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsNjField.GPC_SEGMENT_TYPE, UsNjField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 7ef8c75d..d3963387 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -5,25 +5,25 @@ public class UsTnField { - public static String VERSION = "Version"; - public static String PROCESSING_NOTICE = "ProcessingNotice"; - public static String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static String SALE_OPT_OUT = "SaleOptOut"; - public static String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; + public static final String VERSION = "Version"; + public static final String PROCESSING_NOTICE = "ProcessingNotice"; + public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; + public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; + public static final String SALE_OPT_OUT = "SaleOptOut"; + public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; + public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; + public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; + public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; + public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; + public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; + public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - public static String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static String GPC = "Gpc"; + public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; + public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; + public static final String GPC = "Gpc"; //@formatter:off - public static List USTN_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USTN_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsTnField.VERSION, UsTnField.PROCESSING_NOTICE, UsTnField.SALE_OPT_OUT_NOTICE, @@ -40,7 +40,7 @@ public class UsTnField { //@formatter:on //@formatter:off - public static List USTN_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final List USTN_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { UsTnField.GPC_SEGMENT_TYPE, UsTnField.GPC }); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 82538ee7..a8ecdba0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -9,15 +10,15 @@ public class UsDe extends AbstractLazilyEncodableSection { - public static int ID = 17; - public static int VERSION = 1; - public static String NAME = "usde"; + public static final int ID = 17; + public static final int VERSION = 1; + public static final String NAME = "usde"; public UsDe() { super(); } - public UsDe(String encodedString) { + public UsDe(CharSequence encodedString) { super(); decode(encodedString); } @@ -39,26 +40,23 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsDeCoreSegment()); - segments.add(new UsDeGpcSegment()); - return segments; + return Arrays.asList(new UsDeCoreSegment(), new UsDeGpcSegment()); } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if (encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); - - if (encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - - if (encodedSegments.length > 1) { + + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); } @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if (!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index a3ab88e3..0f86ce32 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsIaField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -9,15 +10,15 @@ public class UsIa extends AbstractLazilyEncodableSection { - public static int ID = 18; - public static int VERSION = 1; - public static String NAME = "usia"; + public static final int ID = 18; + public static final int VERSION = 1; + public static final String NAME = "usia"; public UsIa() { super(); } - public UsIa(String encodedString) { + public UsIa(CharSequence encodedString) { super(); decode(encodedString); } @@ -39,26 +40,23 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsIaCoreSegment()); - segments.add(new UsIaGpcSegment()); - return segments; + return Arrays.asList(new UsIaCoreSegment(), new UsIaGpcSegment()); } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if (encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); - - if (encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - - if (encodedSegments.length > 1) { + + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); } @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if (!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index e8b7b882..24657bab 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -9,15 +10,15 @@ public class UsNe extends AbstractLazilyEncodableSection { - public static int ID = 19; - public static int VERSION = 1; - public static String NAME = "usne"; + public static final int ID = 19; + public static final int VERSION = 1; + public static final String NAME = "usne"; public UsNe() { super(); } - public UsNe(String encodedString) { + public UsNe(CharSequence encodedString) { super(); decode(encodedString); } @@ -39,26 +40,23 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsNeCoreSegment()); - segments.add(new UsNeGpcSegment()); - return segments; + return Arrays.asList(new UsNeCoreSegment(), new UsNeGpcSegment()); } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); - - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); } @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 7bf40fe2..649e21fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -9,15 +10,15 @@ public class UsNh extends AbstractLazilyEncodableSection { - public static int ID = 20; - public static int VERSION = 1; - public static String NAME = "usnh"; + public static final int ID = 20; + public static final int VERSION = 1; + public static final String NAME = "usnh"; public UsNh() { super(); } - public UsNh(String encodedString) { + public UsNh(CharSequence encodedString) { super(); decode(encodedString); } @@ -39,26 +40,23 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsNhCoreSegment()); - segments.add(new UsNhGpcSegment()); - return segments; + return Arrays.asList(new UsNhCoreSegment(), new UsNhGpcSegment()); } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); - - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); } @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index f24e043f..d08ec5db 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -9,15 +10,15 @@ public class UsNj extends AbstractLazilyEncodableSection { - public static int ID = 21; - public static int VERSION = 1; - public static String NAME = "usnj"; + public static final int ID = 21; + public static final int VERSION = 1; + public static final String NAME = "usnj"; public UsNj() { super(); } - public UsNj(String encodedString) { + public UsNj(CharSequence encodedString) { super(); decode(encodedString); } @@ -39,26 +40,23 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsNjCoreSegment()); - segments.add(new UsNjGpcSegment()); - return segments; + return Arrays.asList(new UsNjCoreSegment(), new UsNjGpcSegment()); } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); - - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); } @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 2403f09d..f19c5d7d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -9,15 +10,15 @@ public class UsTn extends AbstractLazilyEncodableSection { - public static int ID = 22; - public static int VERSION = 1; - public static String NAME = "ustn"; + public static final int ID = 22; + public static final int VERSION = 1; + public static final String NAME = "ustn"; public UsTn() { super(); } - public UsTn(String encodedString) { + public UsTn(CharSequence encodedString) { super(); decode(encodedString); } @@ -39,26 +40,23 @@ public int getVersion() { @Override protected List initializeSegments() { - List segments = new ArrayList<>(); - segments.add(new UsTnCoreSegment()); - segments.add(new UsTnGpcSegment()); - return segments; + return Arrays.asList(new UsTnCoreSegment(), new UsTnGpcSegment()); } @Override - protected List decodeSection(String encodedString) { + protected List decodeSection(CharSequence encodedString) { List segments = initializeSegments(); if(encodedString != null && !encodedString.isEmpty()) { - String[] encodedSegments = encodedString.split("\\."); + List encodedSegments = SlicedCharSequence.split(encodedString,'.'); - if(encodedSegments.length > 0) { - segments.get(0).decode(encodedSegments[0]); + if(encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - if(encodedSegments.length > 1) { + if(encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments[1]); + segments.get(1).decode(encodedSegments.get(1)); } else { segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); } @@ -69,7 +67,7 @@ protected List decodeSection(String encodedString) { @Override protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(); + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encode()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index a011faa0..52e18408 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -83,12 +84,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsDeCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 66fe0431..824a9166 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -46,12 +47,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsDeGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 9cd9a917..36b14488 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -82,12 +83,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsIaCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 12cb0bd6..9b9dcaa2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -46,12 +47,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsIaGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index 7a98c30f..b4bd1ad4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -82,12 +83,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNeCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 6d050371..b67e096e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -46,12 +47,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNeGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 76fedd66..291a771e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -81,12 +82,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNhCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 86587dd0..a455a629 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -46,12 +47,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNhGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index e71fecc1..b84e0b83 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -81,12 +82,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNjCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 37ee7d34..951f35ff 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -46,12 +47,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNjGpcSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index 425f1305..6652f9ad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -5,6 +5,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -81,12 +82,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsTnCoreSegment '" + encodedString + "'", e); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index f4a0b32c..e58aebbe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -3,6 +3,7 @@ import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -46,12 +47,12 @@ protected String encodeSegment(EncodableBitStringFields fields) { } @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.isEmpty()) { this.fields.reset(fields); } try { - String bitString = base64UrlEncoder.decode(encodedString); + BitString bitString = base64UrlEncoder.decode(encodedString); bitStringEncoder.decode(bitString, getFieldNames(), fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsTnGpcSegment '" + encodedString + "'", e); From c099e37f37bab6604775c7450ca18117cb39f627 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 24 Mar 2025 17:11:59 -0400 Subject: [PATCH 011/146] make Segments smaller --- .../segment/AbstractLazilyEncodableSegment.java | 13 +++++++++++++ .../gpp/encoder/segment/HeaderV1CoreSegment.java | 4 ++-- .../gpp/encoder/segment/TcfCaV1CoreSegment.java | 4 ++-- .../segment/TcfCaV1DisclosedVendorsSegment.java | 4 ++-- .../segment/TcfCaV1PublisherPurposesSegment.java | 4 ++-- .../gpp/encoder/segment/TcfEuV2CoreSegment.java | 4 ++-- .../segment/TcfEuV2PublisherPurposesSegment.java | 4 ++-- .../segment/TcfEuV2VendorsAllowedSegment.java | 4 ++-- .../segment/TcfEuV2VendorsDisclosedSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsCaCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsCaGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsCoCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsCoGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsCtCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsCtGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsDeCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsDeGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsFlCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsIaCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsIaGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsMtCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsMtGpcSegment.java | 4 ++-- .../gpp/encoder/segment/UsNatCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsNatGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsNeCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsNeGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsNhCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsNhGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsNjCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsNjGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsOrCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsOrGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsTnCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsTnGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsTxCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsTxGpcSegment.java | 4 ++-- .../iab/gpp/encoder/segment/UsUtCoreSegment.java | 16 ++-------------- .../iab/gpp/encoder/segment/UsVaCoreSegment.java | 16 ++-------------- 38 files changed, 87 insertions(+), 266 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index efa895d8..6e2ea304 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -1,10 +1,23 @@ package com.iab.gpp.encoder.segment; +import java.util.List; +import java.util.function.Predicate; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.Fields; public abstract class AbstractLazilyEncodableSegment> implements EncodableSegment { + + protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); + protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); + protected static final Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { + for (int n : l) { + if (n < 0 || n > 2) { + return false; + } + } + return true; + }); protected T fields; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 5b7ed002..102e48e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -15,8 +15,8 @@ public class HeaderV1CoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public HeaderV1CoreSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index ab1a1608..e1ed86c7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -21,8 +21,8 @@ public class TcfCaV1CoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfCaV1CoreSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 0f7c6f37..ab3e4ed8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -14,8 +14,8 @@ public class TcfCaV1DisclosedVendorsSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfCaV1DisclosedVendorsSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 2fe380c6..d66e1a38 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -16,8 +16,8 @@ public class TcfCaV1PublisherPurposesSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfCaV1PublisherPurposesSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 69e1561c..39cf65ce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -21,8 +21,8 @@ public class TcfEuV2CoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2CoreSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 01b2551a..3ba931e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -16,8 +16,8 @@ public class TcfEuV2PublisherPurposesSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2PublisherPurposesSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 3dc7ac7d..469a919a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -14,8 +14,8 @@ public class TcfEuV2VendorsAllowedSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2VendorsAllowedSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index ef980464..698ca03e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -14,8 +14,8 @@ public class TcfEuV2VendorsDisclosedSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2VendorsDisclosedSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index c2120771..850c0fad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsCaCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCaCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); fields.put(UsCaField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index c36facaf..2c075008 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -13,8 +13,8 @@ public class UsCaGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCaGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index c2e8952b..e2c76367 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsCoCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCoCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); fields.put(UsCoField.SHARING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 98c94849..f568c52b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -13,8 +13,8 @@ public class UsCoGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCoGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index bffc4a1b..8dbd6c0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsCtCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCtCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); fields.put(UsCtField.SHARING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index 73c8018c..c3d23ecd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -13,8 +13,8 @@ public class UsCtGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCtGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 52e18408..39f29f2e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -17,8 +16,8 @@ public class UsDeCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsDeCoreSegment() { super(); @@ -36,17 +35,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); fields.put(UsDeField.PROCESSING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 824a9166..bde56de9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -13,8 +13,8 @@ public class UsDeGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsDeGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 19da27f5..4ce363d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsFlCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsFlCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); fields.put(UsFlField.PROCESSING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 36b14488..774f2ce1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -17,8 +16,8 @@ public class UsIaCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsIaCoreSegment() { super(); @@ -36,17 +35,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); fields.put(UsIaField.PROCESSING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 9b9dcaa2..6b3df78b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -13,8 +13,8 @@ public class UsIaGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsIaGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 117aae94..9558cfc8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsMtCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsMtCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); fields.put(UsMtField.SHARING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index e01c5021..185369b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -13,8 +13,8 @@ public class UsMtGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsMtGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 62ae2208..973a4045 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsNatCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNatCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); fields.put(UsNatField.SHARING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 3f5b9044..4ba31294 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -13,8 +13,8 @@ public class UsNatGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNatGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index b4bd1ad4..eecc38a4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -17,8 +16,8 @@ public class UsNeCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNeCoreSegment() { super(); @@ -36,17 +35,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); fields.put(UsNeField.PROCESSING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index b67e096e..0b924f73 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -13,8 +13,8 @@ public class UsNeGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNeGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 291a771e..af9d7adc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsNhCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNhCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); fields.put(UsNhField.PROCESSING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index a455a629..9aca6a6e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -13,8 +13,8 @@ public class UsNhGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNhGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index b84e0b83..515f53ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsNjCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNjCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); fields.put(UsNjField.PROCESSING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 951f35ff..8f1b6d28 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -13,8 +13,8 @@ public class UsNjGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNjGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index 188c0ac0..e6dfc308 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsOrCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsOrCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); fields.put(UsOrField.PROCESSING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index ede06795..fae02c65 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -13,8 +13,8 @@ public class UsOrGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsOrGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index 6652f9ad..94b505b0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsTnCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTnCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); fields.put(UsTnField.PROCESSING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index e58aebbe..8c1f24ef 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -13,8 +13,8 @@ public class UsTnGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTnGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 3f8666c3..dd5f9deb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -17,8 +16,8 @@ public class UsTxCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTxCoreSegment() { super(); @@ -36,17 +35,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); fields.put(UsTxField.PROCESSING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index 8140f7b8..88fdf419 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -13,8 +13,8 @@ public class UsTxGpcSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTxGpcSegment() { super(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 9ba5b8e1..770d7ea1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsUtCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsUtCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); fields.put(UsUtField.SHARING_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 923626f9..5a819cc9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -2,7 +2,6 @@ import java.util.Arrays; import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -16,8 +15,8 @@ public class UsVaCoreSegment extends AbstractLazilyEncodableSegment { - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); + private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); + private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsVaCoreSegment() { super(); @@ -35,17 +34,6 @@ public List getFieldNames() { @Override protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - EncodableBitStringFields fields = new EncodableBitStringFields(); fields.put(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); fields.put(UsVaField.SHARING_NOTICE, From 6e6709df7d12ef8d9d401b4b9ed21912441b9445 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 24 Mar 2025 22:17:50 -0400 Subject: [PATCH 012/146] optimize encoding --- .../java/com/iab/gpp/encoder/GppModel.java | 3 +- .../base64/AbstractBase64UrlEncoder.java | 12 +-- .../base64/CompressedBase64UrlEncoder.java | 32 ++++---- .../base64/TraditionalBase64UrlEncoder.java | 16 ++-- .../encoder/bitstring/BitStringBuilder.java | 18 ++++- .../encoder/bitstring/BitStringEncoder.java | 8 +- .../AbstractEncodableBitStringDataType.java | 3 +- .../EncodableArrayOfFixedIntegerRanges.java | 12 ++- .../encoder/datatype/EncodableBoolean.java | 5 +- .../encoder/datatype/EncodableDataType.java | 3 +- .../encoder/datatype/EncodableDatetime.java | 5 +- .../datatype/EncodableFibonacciInteger.java | 5 +- .../EncodableFibonacciIntegerRange.java | 5 +- .../datatype/EncodableFixedBitfield.java | 5 +- .../datatype/EncodableFixedInteger.java | 5 +- .../datatype/EncodableFixedIntegerList.java | 5 +- .../datatype/EncodableFixedIntegerRange.java | 5 +- .../datatype/EncodableFixedString.java | 5 +- .../datatype/EncodableFlexibleBitfield.java | 5 +- .../EncodableOptimizedFibonacciRange.java | 4 +- .../EncodableOptimizedFixedRange.java | 4 +- .../datatype/encoder/BooleanEncoder.java | 7 +- .../datatype/encoder/DatetimeEncoder.java | 7 +- .../encoder/FibonacciIntegerEncoder.java | 14 ++-- .../encoder/FibonacciIntegerRangeEncoder.java | 13 ++-- .../encoder/FixedBitfieldEncoder.java | 10 +-- .../datatype/encoder/FixedIntegerEncoder.java | 28 ++----- .../encoder/FixedIntegerListEncoder.java | 12 +-- .../encoder/FixedIntegerRangeEncoder.java | 14 ++-- .../datatype/encoder/FixedLongEncoder.java | 26 ++----- .../datatype/encoder/FixedStringEncoder.java | 10 +-- .../OptimizedFibonacciRangeEncoder.java | 17 +++-- .../encoder/OptimizedFixedRangeEncoder.java | 18 +++-- ...actEncodableSegmentedBitStringSection.java | 7 +- .../encoder/segment/HeaderV1CoreSegment.java | 3 +- .../encoder/segment/TcfCaV1CoreSegment.java | 3 +- .../TcfCaV1DisclosedVendorsSegment.java | 3 +- .../TcfCaV1PublisherPurposesSegment.java | 3 +- .../encoder/segment/TcfEuV2CoreSegment.java | 3 +- .../TcfEuV2PublisherPurposesSegment.java | 3 +- .../segment/TcfEuV2VendorsAllowedSegment.java | 3 +- .../TcfEuV2VendorsDisclosedSegment.java | 3 +- .../gpp/encoder/segment/UsCaCoreSegment.java | 3 +- .../gpp/encoder/segment/UsCaGpcSegment.java | 3 +- .../gpp/encoder/segment/UsCoCoreSegment.java | 3 +- .../gpp/encoder/segment/UsCoGpcSegment.java | 3 +- .../gpp/encoder/segment/UsCtCoreSegment.java | 3 +- .../gpp/encoder/segment/UsCtGpcSegment.java | 3 +- .../gpp/encoder/segment/UsDeCoreSegment.java | 3 +- .../gpp/encoder/segment/UsDeGpcSegment.java | 3 +- .../gpp/encoder/segment/UsFlCoreSegment.java | 3 +- .../gpp/encoder/segment/UsIaCoreSegment.java | 3 +- .../gpp/encoder/segment/UsIaGpcSegment.java | 3 +- .../gpp/encoder/segment/UsMtCoreSegment.java | 3 +- .../gpp/encoder/segment/UsMtGpcSegment.java | 3 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 2 +- .../gpp/encoder/segment/UsNatGpcSegment.java | 3 +- .../gpp/encoder/segment/UsNeCoreSegment.java | 3 +- .../gpp/encoder/segment/UsNeGpcSegment.java | 3 +- .../gpp/encoder/segment/UsNhCoreSegment.java | 3 +- .../gpp/encoder/segment/UsNhGpcSegment.java | 3 +- .../gpp/encoder/segment/UsNjCoreSegment.java | 3 +- .../gpp/encoder/segment/UsNjGpcSegment.java | 3 +- .../gpp/encoder/segment/UsOrCoreSegment.java | 3 +- .../gpp/encoder/segment/UsOrGpcSegment.java | 3 +- .../gpp/encoder/segment/UsTnCoreSegment.java | 3 +- .../gpp/encoder/segment/UsTnGpcSegment.java | 3 +- .../gpp/encoder/segment/UsTxCoreSegment.java | 3 +- .../gpp/encoder/segment/UsTxGpcSegment.java | 3 +- .../gpp/encoder/segment/UsUtCoreSegment.java | 3 +- .../gpp/encoder/segment/UsVaCoreSegment.java | 3 +- .../TraditionalBase64UrlEncoderTest.java | 14 +++- .../EncodableFixedIntegerRangeTest.java | 9 ++- .../EncodableOptimizedFixedRangeTest.java | 17 ++++- .../datatype/encoder/BooleanEncoderTest.java | 9 ++- .../datatype/encoder/DatetimeEncoderTest.java | 5 +- .../encoder/FibonacciIntegerEncoderTest.java | 32 ++++++-- .../FibonacciIntegerRangeEncoderTest.java | 31 +++++--- .../encoder/FixedBitfieldEncoderTest.java | 32 ++++++-- .../encoder/FixedIntegerEncoderTest.java | 24 ++++-- .../encoder/FixedIntegerListEncoderTest.java | 76 ++++++++++++++----- .../encoder/FixedIntegerRangeEncoderTest.java | 37 ++++++--- .../encoder/FixedLongEncoderTest.java | 28 +++++-- .../encoder/FixedStringEncoderTest.java | 12 ++- 84 files changed, 495 insertions(+), 289 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 6efc9c6c..e8e66dd2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -342,8 +342,7 @@ protected String encodeModel(Map sections) { } encodedSections.add(0, header.encode()); - String encodedString = encodedSections.stream().collect(Collectors.joining("~")); - return encodedString; + return String.join("~", encodedSections); } protected Map decodeModel(String str) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index c2f00837..e24123cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -8,7 +8,7 @@ public abstract class AbstractBase64UrlEncoder { - abstract protected String pad(String bitString); + abstract protected void pad(BitStringBuilder bitString); private static final int BASE64_BITS = 6; /** @@ -20,13 +20,15 @@ public abstract class AbstractBase64UrlEncoder { private static final BitString[] REVERSE_DICT = new BitString[REVERSE_DICT_SIZE]; static { for (int i = 0; i < DICT.length(); i++) { - REVERSE_DICT[DICT.charAt(i)] = BitString.of(FixedIntegerEncoder.encode(i, 6)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerEncoder.encode(builder, i, 6); + REVERSE_DICT[DICT.charAt(i)] = builder.build(); } } - public String encode(String bitString) { - bitString = pad(bitString); - + public String encode(BitStringBuilder bitStringBuilder) { + pad(bitStringBuilder); + BitString bitString = bitStringBuilder.build(); int length = bitString.length(); StringBuilder str = new StringBuilder(length / BASE64_BITS); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index c9e71341..f943016b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.base64; -import java.util.Arrays; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; public class CompressedBase64UrlEncoder extends AbstractBase64UrlEncoder { @@ -15,24 +15,22 @@ public static CompressedBase64UrlEncoder getInstance() { } @Override - protected String pad(String bitString) { - char[] chars1 = null; - if(bitString.length() % 8 > 0) { - chars1 = new char[8 - (bitString.length() % 8)]; - } else { - chars1 = new char[0]; + protected void pad(BitStringBuilder bitString) { + int remainder = bitString.length() % 8; + if(remainder > 0) { + int padding = 8 - remainder; + for (int i = 0; i < padding; i++) { + bitString.append(false); + } } - Arrays.fill(chars1, '0'); - - char[] chars2 = null; - if((bitString.length() + chars1.length) % 6 > 0) { - chars2 = new char[6 - ((bitString.length() + chars1.length) % 6)]; - } else { - chars2 = new char[0]; + + remainder = bitString.length() % 6; + if(remainder > 0) { + int padding = 6 - remainder; + for (int i = 0; i < padding; i++) { + bitString.append(false); + } } - Arrays.fill(chars2, '0'); - - return bitString + new String(chars1) + new String(chars2); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index e2d732de..996c4f81 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.base64; -import java.util.Arrays; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; public class TraditionalBase64UrlEncoder extends AbstractBase64UrlEncoder { @@ -15,13 +15,13 @@ public static TraditionalBase64UrlEncoder getInstance() { } @Override - protected String pad(String bitString) { - if(bitString.length() % 24 > 0) { - char[] chars = new char[24 - (bitString.length() % 24)]; - Arrays.fill(chars, '0'); - return bitString + new String(chars); - } else { - return bitString; + protected void pad(BitStringBuilder bitString) { + int remainder = bitString.length() % 24; + if (remainder > 0) { + int padding = 24 - remainder; + for (int i = 0; i < padding; i++) { + bitString.append(false); + } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java index df493d26..81f22af7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java @@ -18,17 +18,31 @@ public BitString build() { return new BitString(bitSet, 0, length); } - public void append(boolean value) { + public BitStringBuilder append(boolean value) { int idx = length++; if (value) { bitSet.set(idx); } + return this; } - public void append(BitString other) { + public BitStringBuilder append(BitString other) { int length = other.length(); for (int i = 0; i < length; i++) { append(other.getValue(i)); } + return this; + } + + public int length() { + return length; + } + + public BitStringBuilder append(BitStringBuilder rangeBitString) { + int length = rangeBitString.length(); + for (int i = 0; i < length; i++) { + append(rangeBitString.bitSet.get(i)); + } + return this; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java index 011456d2..1bb9e648 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java @@ -19,19 +19,19 @@ public static BitStringEncoder getInstance() { return instance; } - public String encode(EncodableBitStringFields fields, List fieldNames) { - StringBuilder bitString = new StringBuilder(); + public BitStringBuilder encode(EncodableBitStringFields fields, List fieldNames) { + BitStringBuilder bitString = new BitStringBuilder(); for (int i = 0; i < fieldNames.size(); i++) { String fieldName = fieldNames.get(i); AbstractEncodableBitStringDataType field = fields.get(fieldName); if (field != null) { - bitString.append(field.encode()); + field.encode(bitString); } else { throw new EncodingException("Field not found: '" + fieldName + "'"); } } - return bitString.toString(); + return bitString; } public void decode(BitString bitString, List fieldNames, EncodableBitStringFields fields) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index e3db9439..b5d41f26 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -5,6 +5,7 @@ import java.util.stream.Collectors; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.ValidationException; public abstract class AbstractEncodableBitStringDataType implements EncodableDataType { @@ -50,7 +51,7 @@ public boolean getHardFailIfMissing() { return this.hardFailIfMissing; } - public abstract String encode(); + public abstract void encode(BitStringBuilder builder); public abstract void decode(BitString bitString); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 3902104b..23e319d4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -36,19 +36,17 @@ public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStr } @Override - public String encode() { + public void encode(BitStringBuilder sb) { try { List entries = this.value; - StringBuilder sb = new StringBuilder(); - sb.append(FixedIntegerEncoder.encode(entries.size(), 12)); + FixedIntegerEncoder.encode(sb, entries.size(), 12); for (RangeEntry entry : entries) { - sb.append(FixedIntegerEncoder.encode(entry.getKey(), keyBitStringLength)) - .append(FixedIntegerEncoder.encode(entry.getType(), typeBitStringLength)) - .append(FixedIntegerRangeEncoder.encode(entry.getIds())); + FixedIntegerEncoder.encode(sb, entry.getKey(), keyBitStringLength); + FixedIntegerEncoder.encode(sb, entry.getType(), typeBitStringLength); + FixedIntegerRangeEncoder.encode(sb, entry.getIds()); } - return sb.toString(); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 368808cc..39e7c977 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -21,9 +22,9 @@ public EncodableBoolean(Boolean value, boolean hardFailIfMissing) { setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder){ try { - return BooleanEncoder.encode(this.value); + BooleanEncoder.encode(builder, this.value); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java index 0a407510..530ae121 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java @@ -1,9 +1,10 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; public interface EncodableDataType extends DataType { - String encode(); + void encode(BitStringBuilder builder); void decode(BitString str); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index fe37e3b2..7a440a97 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -3,6 +3,7 @@ import java.time.ZonedDateTime; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -23,9 +24,9 @@ public EncodableDatetime(ZonedDateTime value, boolean hardFailIfMissing) { setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return DatetimeEncoder.encode(this.value); + DatetimeEncoder.encode(builder, this.value); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 8e90199b..bfee8f8f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -21,9 +22,9 @@ public EncodableFibonacciInteger(Integer value, boolean hardFailIfMissing) { setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return FibonacciIntegerEncoder.encode(this.value); + FibonacciIntegerEncoder.encode(builder, this.value); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 42c40eb0..ed2afb56 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -5,6 +5,7 @@ import java.util.TreeSet; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; @@ -27,9 +28,9 @@ public EncodableFibonacciIntegerRange(List value, boolean hardFailIfMis setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return FibonacciIntegerRangeEncoder.encode(this.value); + FibonacciIntegerRangeEncoder.encode(builder, this.value); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 1411d9d9..e5dafae7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -4,6 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -29,9 +30,9 @@ public EncodableFixedBitfield(List value, boolean hardFailIfMissing) { setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return FixedBitfieldEncoder.encode(this.value, this.numElements); + FixedBitfieldEncoder.encode(builder, this.value, this.numElements); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 44cedea7..5159d272 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -26,9 +27,9 @@ public EncodableFixedInteger(int bitStringLength, Integer value, boolean hardFai setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return FixedIntegerEncoder.encode(this.value, this.bitStringLength); + FixedIntegerEncoder.encode(builder, this.value, this.bitStringLength); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 14ed4ebc..dd6f1dfa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -4,6 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -33,9 +34,9 @@ public EncodableFixedIntegerList(int elementBitStringLength, List value setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return FixedIntegerListEncoder.encode(this.value, this.elementBitStringLength, this.numElements); + FixedIntegerListEncoder.encode(builder, this.value, this.elementBitStringLength, this.numElements); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 4cc22a56..506ee725 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -5,6 +5,7 @@ import java.util.TreeSet; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; @@ -26,9 +27,9 @@ public EncodableFixedIntegerRange(List value, boolean hardFailIfMissing setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return FixedIntegerRangeEncoder.encode(this.value); + FixedIntegerRangeEncoder.encode(builder, this.value); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 83fc58f6..200b6ded 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -26,9 +27,9 @@ public EncodableFixedString(int stringLength, String value, boolean hardFailIfMi setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return FixedStringEncoder.encode(this.value, this.stringLength); + FixedStringEncoder.encode(builder, this.value, this.stringLength); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 80967eff..d15b9f23 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -5,6 +5,7 @@ import java.util.function.IntSupplier; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -30,9 +31,9 @@ public EncodableFlexibleBitfield(IntSupplier getLengthSupplier, List va this.setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return FixedBitfieldEncoder.encode(this.value, this.getLengthSupplier.getAsInt()); + FixedBitfieldEncoder.encode(builder, this.value, this.getLengthSupplier.getAsInt()); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java index b1ba1b7a..01bae044 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java @@ -27,9 +27,9 @@ public EncodableOptimizedFibonacciRange(List value, boolean hardFailIfM setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return OptimizedFibonacciRangeEncoder.encode(this.value); + OptimizedFibonacciRangeEncoder.encode(builder, this.value); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index ab9e486f..b8df976b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -28,9 +28,9 @@ public EncodableOptimizedFixedRange(List value, boolean hardFailIfMissi setValue(value); } - public String encode() { + public void encode(BitStringBuilder builder) { try { - return OptimizedFixedRangeEncoder.encode(this.value); + OptimizedFixedRangeEncoder.encode(builder, this.value); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java index 8d931de2..ba58b995 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java @@ -1,15 +1,16 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class BooleanEncoder { - public static String encode(Boolean value) { + public static void encode(BitStringBuilder builder, Boolean value) { if (value == true) { - return BitString.TRUE_STRING; + builder.append(true); } else if (value == false) { - return BitString.FALSE_STRING; + builder.append(false); } else { throw new EncodingException("Unencodable Boolean '" + value + "'"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index a0a821e1..c2a520b9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -5,17 +5,18 @@ import java.time.ZonedDateTime; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoder { public static final ZoneId UTC = ZoneId.of("UTC"); - public static String encode(ZonedDateTime value) { + public static void encode(BitStringBuilder builder, ZonedDateTime value) { if (value != null) { - return FixedLongEncoder.encode(value.toInstant().toEpochMilli() / 100, 36); + FixedLongEncoder.encode(builder, value.toInstant().toEpochMilli() / 100, 36); } else { - return FixedLongEncoder.encode(0, 36); + FixedLongEncoder.encode(builder, 0, 36); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index eedc95ba..5f628384 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -22,7 +23,7 @@ public class FibonacciIntegerEncoder { } } - public static String encode(int value) { + public static void encode(BitStringBuilder builder, int value) { int largestIndex = 0; for (int i = 0; i < FIBONACCI_LIMIT; i++) { if (value >= FIBONACCI_NUMBERS[i]) { @@ -35,18 +36,17 @@ public static String encode(int value) { throw new EncodingException("Unencodable FibonacciInteger " + value); } - String bitString = BitString.TRUE_STRING; + int out = 1; + int mask = 1; for (int i = largestIndex - 1; i >= 0; i--) { + mask <<= 1; int f = FIBONACCI_NUMBERS[i]; if (value >= f) { - bitString = BitString.TRUE_STRING + bitString; + out |= mask; value -= f; - } else { - bitString = BitString.FALSE_STRING + bitString; } } - - return bitString; + FixedIntegerEncoder.encode(builder, out, largestIndex + 1); } public static int decode(BitString bitString) throws DecodingException { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index c74be86a..d60636b5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -5,11 +5,12 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { - public static String encode(List value) { + public static void encode(BitStringBuilder builder, List value) { Collections.sort(value); List> groups = new ArrayList<>(); @@ -27,21 +28,23 @@ public static String encode(List value) { groupStartIndex = groupEndIndex + 1; } - StringBuilder bitString = new StringBuilder(FixedIntegerEncoder.encode(groups.size(), 12)); + FixedIntegerEncoder.encode(builder,groups.size(), 12); for (int i = 0; i < groups.size(); i++) { if (groups.get(i).size() == 1) { int v = groups.get(i).get(0) - offset; offset = groups.get(i).get(0); - bitString.append(BitString.FALSE).append(FibonacciIntegerEncoder.encode(v)); + builder.append(false); + FibonacciIntegerEncoder.encode(builder, v); } else { int startVal = groups.get(i).get(0) - offset; offset = groups.get(i).get(0); int endVal = groups.get(i).get(groups.get(i).size() - 1) - offset; offset = groups.get(i).get(groups.get(i).size() - 1); - bitString.append(BitString.TRUE).append(FibonacciIntegerEncoder.encode(startVal)).append(FibonacciIntegerEncoder.encode(endVal)); + builder.append(true); + FibonacciIntegerEncoder.encode(builder, startVal); + FibonacciIntegerEncoder.encode(builder, endVal); } } - return bitString.toString(); } public static List decode(BitString bitString) throws DecodingException { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index d04578d4..74ae4cf0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -3,26 +3,24 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.EncodingException; public class FixedBitfieldEncoder { - public static String encode(List value, int bitStringLength) { + public static void encode(BitStringBuilder builder, List value, int bitStringLength) { int length = value.size(); if (length > bitStringLength) { throw new EncodingException("Too many values '" + length + "'"); } - StringBuilder bitString = new StringBuilder(length); for (int i = 0; i < bitStringLength; i++) { if (i < length) { - bitString.append(BooleanEncoder.encode(value.get(i))); + BooleanEncoder.encode(builder, value.get(i)); } else { - bitString.append(BitString.FALSE); + builder.append(false); } } - - return bitString.toString(); } public static List decode(BitString bitString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index a2b3d437..5a8244a8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -1,34 +1,22 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerEncoder { - public static String encode(int value, int bitStringLength) { - // let bitString = value.toString(2); - - String bitString = ""; - while (value > 0) { - if ((value & 1) == 1) { - bitString = BitString.TRUE_STRING + bitString; - } else { - bitString = BitString.FALSE_STRING + bitString; - } - value = value >> 1; - } - - if (bitString.length() > bitStringLength) { + public static void encode(BitStringBuilder builder, int value, int bitStringLength) { + int mask = 1 << bitStringLength; + if (value >= mask) { throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + bitStringLength + "'"); + "Numeric value '" + value + "' is too large for a bit string length of '" + bitStringLength + "'"); } - - while (bitString.length() < bitStringLength) { - bitString = BitString.FALSE_STRING + bitString; + for (int i = 0; i < bitStringLength; i++) { + mask >>= 1; + builder.append((value & mask) > 0); } - - return bitString; } public static int decode(BitString bitString) throws DecodingException { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 697ba1e0..9c784a8d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -4,31 +4,27 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerListEncoder { - public static String encode(List value, int elementBitStringLength, int numElements) { + public static void encode(BitStringBuilder builder, List value, int elementBitStringLength, int numElements) { int length = value.size(); if (length > numElements) { throw new EncodingException("Too many values '" + value.size() + "'"); } - int expectedLength = elementBitStringLength * numElements; - - StringBuilder bitString = new StringBuilder(expectedLength); for (int i = 0; i < numElements; i++) { if (i < length) { - bitString.append(FixedIntegerEncoder.encode(value.get(i), elementBitStringLength)); + FixedIntegerEncoder.encode(builder, value.get(i), elementBitStringLength); } else { for (int j = 0; j < elementBitStringLength; j++) { - bitString.append(BitString.FALSE); + builder.append(false); } } } - - return bitString.toString(); } public static List decode(BitString bitString, int elementBitStringLength, int numElements) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 9edec946..fc8b6c2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -5,11 +5,12 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { - public static String encode(List value) { + public static void encode(BitStringBuilder builder, List value) { Collections.sort(value); List> groups = new ArrayList<>(); @@ -26,16 +27,17 @@ public static String encode(List value) { groupStartIndex = groupEndIndex + 1; } - StringBuilder bitString = new StringBuilder(FixedIntegerEncoder.encode(groups.size(), 12)); + FixedIntegerEncoder.encode(builder, groups.size(), 12); for (int i = 0; i < groups.size(); i++) { if (groups.get(i).size() == 1) { - bitString.append(BitString.FALSE).append(FixedIntegerEncoder.encode(groups.get(i).get(0), 16)); + builder.append(false); + FixedIntegerEncoder.encode(builder, groups.get(i).get(0), 16); } else { - bitString.append(BitString.TRUE).append(FixedIntegerEncoder.encode(groups.get(i).get(0), 16)) - .append(FixedIntegerEncoder.encode(groups.get(i).get(groups.get(i).size() - 1), 16)); + builder.append(true); + FixedIntegerEncoder.encode(builder, groups.get(i).get(0), 16); + FixedIntegerEncoder.encode(builder, groups.get(i).get(groups.get(i).size() - 1), 16); } } - return bitString.toString(); } public static List decode(BitString bitString) throws DecodingException { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java index c2d76775..09eb565b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java @@ -1,32 +1,22 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedLongEncoder { - public static String encode(long value, int bitStringLength) { - String bitString = ""; - while (value > 0) { - if ((value & 1) == 1) { - bitString = BitString.TRUE_STRING + bitString; - } else { - bitString = BitString.FALSE_STRING + bitString; - } - value = value >> 1; - } - - if (bitString.length() > bitStringLength) { + public static void encode(BitStringBuilder builder, long value, int bitStringLength) { + long mask = 1L << bitStringLength; + if (value >= mask) { throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + bitStringLength + "'"); + "Numeric value '" + value + "' is too large for a bit string length of '" + bitStringLength + "'"); } - - while (bitString.length() < bitStringLength) { - bitString = BitString.FALSE_STRING + bitString; + for (int i = 0; i < bitStringLength; i++) { + mask >>= 1; + builder.append((value & mask) > 0); } - - return bitString; } public static long decode(BitString bitString) throws DecodingException { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 95362dd2..d735242e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -1,30 +1,28 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedStringEncoder { private static final char SPACE = ' '; - public static String encode(String value, int stringLength) { + public static void encode(BitStringBuilder builder, String value, int stringLength) { int length = value.length(); - StringBuilder bitString = new StringBuilder(stringLength * 6); for (int i = 0; i < stringLength; i++) { int code = SPACE; if (i < length) { code = value.charAt(i); } if (code == SPACE) { - bitString.append(FixedIntegerEncoder.encode(63, 6)); + FixedIntegerEncoder.encode(builder, 63, 6); } else if (code >= 65) { - bitString.append(FixedIntegerEncoder.encode(((int) value.charAt(i)) - 65, 6)); + FixedIntegerEncoder.encode(builder, ((int) value.charAt(i)) - 65, 6); } else { throw new EncodingException("Unencodable FixedString '" + value + "'"); } } - - return bitString.toString(); } public static String decode(BitString bitString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index c806b40a..e505008d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -4,33 +4,36 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class OptimizedFibonacciRangeEncoder { - public static String encode(List value) throws EncodingException { + public static void encode(BitStringBuilder builder, List value) throws EncodingException { // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way // to identify in advance which will be shorter based on the array length and values int max = value.size() > 0 ? value.get(value.size() - 1) : 0; - String rangeBitString = FibonacciIntegerRangeEncoder.encode(value); + BitStringBuilder rangeBitString = new BitStringBuilder(); + FibonacciIntegerRangeEncoder.encode(rangeBitString, value); int rangeLength = rangeBitString.length(); int bitFieldLength = max; if (rangeLength <= bitFieldLength) { - return FixedIntegerEncoder.encode(max, 16) + BitString.TRUE_STRING + rangeBitString; + FixedIntegerEncoder.encode(builder, max, 16); + builder.append(true).append(rangeBitString); } else { - List bits = new ArrayList<>(max); + FixedIntegerEncoder.encode(builder, max, 16); + builder.append(false); int index = 0; for (int i = 0; i < max; i++) { if (i == value.get(index) - 1) { - bits.add(true); + builder.append(true); index++; } else { - bits.add(false); + builder.append(false); } } - return FixedIntegerEncoder.encode(max, 16) + BitString.FALSE_STRING + FixedBitfieldEncoder.encode(bits, bitFieldLength); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index aa84ebca..52ebaee9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -4,34 +4,36 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class OptimizedFixedRangeEncoder { - public static String encode(List value) throws EncodingException { + public static void encode(BitStringBuilder builder, List value) throws EncodingException { // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way // to identify in advance which will be shorter based on the array length and values int max = value.size() > 0 ? value.get(value.size() - 1) : 0; - String rangeBitString = FixedIntegerRangeEncoder.encode(value); + BitStringBuilder rangeBitString = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(rangeBitString,value); int rangeLength = rangeBitString.length(); int bitFieldLength = max; if (rangeLength <= bitFieldLength) { - return FixedIntegerEncoder.encode(max, 16) + BitString.TRUE_STRING + rangeBitString; + FixedIntegerEncoder.encode(builder, max, 16); + builder.append(true).append(rangeBitString); } else { - List bits = new ArrayList<>(max); + FixedIntegerEncoder.encode(builder, max, 16); + builder.append(false); int index = 0; for (int i = 0; i < max; i++) { if (i == value.get(index) - 1) { - bits.add(true); + builder.append(true); index++; } else { - bits.add(false); + builder.append(false); } } - - return FixedIntegerEncoder.encode(max, 16) + BitString.FALSE_STRING + FixedBitfieldEncoder.encode(bits, bitFieldLength); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java index 984538f4..e5f287d5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java @@ -5,6 +5,7 @@ import java.util.Map; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; import com.iab.gpp.encoder.datatype.SubstringException; import com.iab.gpp.encoder.error.DecodingException; @@ -48,13 +49,13 @@ public List encodeSegmentsToBitStrings() throws EncodingException { int length = this.segments.length; List segmentBitStrings = new ArrayList<>(length); for (int i = 0; i < length; i++) { - StringBuilder segmentBitString = new StringBuilder(); + BitStringBuilder segmentBitString = new BitStringBuilder(); for (int j = 0; j < this.segments[i].length; j++) { String fieldName = this.segments[i][j]; AbstractEncodableBitStringDataType field = this.fields.get(fieldName); if (field != null) { try { - segmentBitString.append(field.encode()); + field.encode(segmentBitString); } catch (Exception e) { throw new EncodingException("Unable to encode " + fieldName, e); } @@ -62,7 +63,7 @@ public List encodeSegmentsToBitStrings() throws EncodingException { throw new EncodingException("Field not found: '" + fieldName + "'"); } } - segmentBitStrings.add(segmentBitString.toString()); + segmentBitStrings.add(segmentBitString.build().toString()); } return segmentBitStrings; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 102e48e8..374be35a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -43,7 +44,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index e1ed86c7..a5772c77 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; @@ -64,7 +65,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index ab3e4ed8..cd5abbdb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index d66e1a38..88a7cdf3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -62,7 +63,7 @@ public int getAsInt() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 39cf65ce..5c790f2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; @@ -68,7 +69,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 3ba931e8..d0758899 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -62,7 +63,7 @@ public int getAsInt() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 469a919a..7ea8afe8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 698ca03e..a608c1c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 850c0fad..67625b1b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -64,7 +65,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 2c075008..148537b7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index e2c76367..7dfdb46a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -61,7 +62,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index f568c52b..da77ec53 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index 8dbd6c0c..03b4d5e6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -62,7 +63,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index c3d23ecd..88736c05 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 39f29f2e..27b31b06 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -66,7 +67,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index bde56de9..036eaa23 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 4ce363d1..0e476b1d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -64,7 +65,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 774f2ce1..e1f857a6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -65,7 +66,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 6b3df78b..81a6d889 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 9558cfc8..5f77c6d2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -64,7 +65,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 185369b6..cbe0c6b3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 973a4045..b4c4fafe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -72,7 +72,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 4ba31294..c5de9412 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index eecc38a4..27458f1b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -65,7 +66,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 0b924f73..dd54550f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index af9d7adc..be82fa67 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -64,7 +65,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 9aca6a6e..87c685e2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 515f53ec..7cf922b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -64,7 +65,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 8f1b6d28..3acc5ce5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index e6dfc308..f1bd0bd9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -64,7 +65,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index fae02c65..1ef5d9ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index 94b505b0..2e7ae67e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -64,7 +65,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index 8c1f24ef..4092c989 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index dd5f9deb..7ba18e87 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -65,7 +66,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index 88fdf419..bb074b11 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -41,7 +42,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 770d7ea1..e2c97443 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -64,7 +65,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 5a819cc9..0d27551b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -62,7 +63,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index c1aea3d1..0def62ca 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; public class TraditionalBase64UrlEncoderTest { @@ -9,17 +11,23 @@ public class TraditionalBase64UrlEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("DBABMAAA", base64UrlEncoder.encode("0000110000010000000000010011")); + BitStringBuilder builder = new BitStringBuilder(); + builder.append(BitString.of("0000110000010000000000010011")); + Assertions.assertEquals("DBABMAAA", base64UrlEncoder.encode(builder)); } @Test public void testEncode2() { - Assertions.assertEquals("DBACNYAA", base64UrlEncoder.encode("000011000001000000000010001101011")); + BitStringBuilder builder = new BitStringBuilder(); + builder.append(BitString.of("000011000001000000000010001101011")); + Assertions.assertEquals("DBACNYAA", base64UrlEncoder.encode(builder)); } @Test public void testEncode3() { - Assertions.assertEquals("DBABjwAA", base64UrlEncoder.encode("00001100000100000000000110001111")); + BitStringBuilder builder = new BitStringBuilder(); + builder.append(BitString.of("00001100000100000000000110001111")); + Assertions.assertEquals("DBABjwAA", base64UrlEncoder.encode(builder)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index 2f4a3d7b..ad194bbe 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,14 +29,18 @@ public void testSubstring2() throws DecodingException, SubstringException { public void testEncode1() throws EncodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); encodableFixedIntegerRange.setValue(Arrays.asList(28)); - Assertions.assertEquals("00000000000100000000000011100", encodableFixedIntegerRange.encode()); + BitStringBuilder builder = new BitStringBuilder(); + encodableFixedIntegerRange.encode(builder); + Assertions.assertEquals("00000000000100000000000011100", builder.build().toString()); } @Test public void testEncode2() throws EncodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); encodableFixedIntegerRange.setValue(Arrays.asList(29)); - Assertions.assertEquals("00000000000100000000000011101", encodableFixedIntegerRange.encode()); + BitStringBuilder builder = new BitStringBuilder(); + encodableFixedIntegerRange.encode(builder); + Assertions.assertEquals("00000000000100000000000011101", builder.build().toString()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 1606424a..881e366a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; public class EncodableOptimizedFixedRangeTest { @@ -13,26 +14,34 @@ public class EncodableOptimizedFixedRangeTest { @Test public void testEncode1() { encodableOptimizedFixedRange.setValue(Arrays.asList(12, 24, 48)); + BitStringBuilder builder = new BitStringBuilder(); + encodableOptimizedFixedRange.encode(builder); Assertions.assertEquals("00000000001100000000000000001000000000001000000000000000000000001", - encodableOptimizedFixedRange.encode()); + builder.build().toString()); } @Test public void testEncode2() { encodableOptimizedFixedRange.setValue(Arrays.asList(18, 30)); - Assertions.assertEquals("00000000000111100000000000000000001000000000001", encodableOptimizedFixedRange.encode()); + BitStringBuilder builder = new BitStringBuilder(); + encodableOptimizedFixedRange.encode(builder); + Assertions.assertEquals("00000000000111100000000000000000001000000000001", builder.build().toString()); } @Test public void testEncode3() { encodableOptimizedFixedRange.setValue(Arrays.asList(28)); - Assertions.assertEquals("000000000001110000000000000000000000000000001", encodableOptimizedFixedRange.encode()); + BitStringBuilder builder = new BitStringBuilder(); + encodableOptimizedFixedRange.encode(builder); + Assertions.assertEquals("000000000001110000000000000000000000000000001", builder.build().toString()); } @Test public void testEncode4() { encodableOptimizedFixedRange.setValue(Arrays.asList(29)); - Assertions.assertEquals("0000000000011101100000000000100000000000011101", encodableOptimizedFixedRange.encode()); + BitStringBuilder builder = new BitStringBuilder(); + encodableOptimizedFixedRange.encode(builder); + Assertions.assertEquals("0000000000011101100000000000100000000000011101", builder.build().toString()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index 02defec2..0a499084 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -4,18 +4,23 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class BooleanEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("0", BooleanEncoder.encode(false)); + BitStringBuilder builder = new BitStringBuilder(); + BooleanEncoder.encode(builder, false); + Assertions.assertEquals("0", builder.build().toString()); } @Test public void testEncode2() { - Assertions.assertEquals("1", BooleanEncoder.encode(true)); + BitStringBuilder builder = new BitStringBuilder(); + BooleanEncoder.encode(builder, true); + Assertions.assertEquals("1", builder.build().toString()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java index a8911830..24d1b29d 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoderTest { @@ -13,7 +14,9 @@ public class DatetimeEncoderTest { @Test public void test1() throws DecodingException { ZonedDateTime date1 = ZonedDateTime.now(ZoneId.of("UTC")); - String encodedDate1 = DatetimeEncoder.encode(date1); + BitStringBuilder builder = new BitStringBuilder(); + DatetimeEncoder.encode(builder, date1); + String encodedDate1 = builder.build().toString(); ZonedDateTime date2 = DatetimeEncoder.decode(BitString.of(encodedDate1)); Assertions.assertEquals((date1.toInstant().toEpochMilli() / 100L) * 100L, date2.toInstant().toEpochMilli()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index b63c7649..62e95b67 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -12,43 +13,58 @@ public class FibonacciIntegerEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("11", FibonacciIntegerEncoder.encode(1)); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerEncoder.encode(builder, 1); + Assertions.assertEquals("11", builder.build().toString()); } @Test public void testEncode2() { - Assertions.assertEquals("011", FibonacciIntegerEncoder.encode(2)); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerEncoder.encode(builder, 2); + Assertions.assertEquals("011", builder.build().toString()); } @Test public void testEncode3() { - Assertions.assertEquals("0011", FibonacciIntegerEncoder.encode(3)); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerEncoder.encode(builder, 3); + Assertions.assertEquals("0011", builder.build().toString()); } @Test public void testEncode4() { - Assertions.assertEquals("1011", FibonacciIntegerEncoder.encode(4)); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerEncoder.encode(builder, 4); + Assertions.assertEquals("1011", builder.build().toString()); } @Test public void testEncode5() { - Assertions.assertEquals("00011", FibonacciIntegerEncoder.encode(5)); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerEncoder.encode(builder, 5); + Assertions.assertEquals("00011", builder.build().toString()); } @Test public void testEncode6() { - Assertions.assertEquals("10011", FibonacciIntegerEncoder.encode(6)); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerEncoder.encode(builder, 6); + Assertions.assertEquals("10011", builder.build().toString()); } @Test public void testEncode7() { - Assertions.assertEquals("01011", FibonacciIntegerEncoder.encode(7)); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerEncoder.encode(builder, 7); + Assertions.assertEquals("01011", builder.build().toString()); } @Test public void testEncodeTooLarge() { + BitStringBuilder builder = new BitStringBuilder(); Assertions.assertThrows(EncodingException.class, () -> - FibonacciIntegerEncoder.encode(Integer.MAX_VALUE)); + FibonacciIntegerEncoder.encode(builder, Integer.MAX_VALUE)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index 8fef068e..ca2d8d60 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -8,45 +8,58 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("000000000000", FibonacciIntegerRangeEncoder.encode(new ArrayList<>())); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerRangeEncoder.encode(builder, new ArrayList<>()); + Assertions.assertEquals("000000000000", builder.build().toString()); } @Test public void testEncode2() { - Assertions.assertEquals("0000000000010011", FibonacciIntegerRangeEncoder.encode(Arrays.asList(2))); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2)); + Assertions.assertEquals("0000000000010011", builder.build().toString()); } @Test public void testEncode3() { - Assertions.assertEquals("00000000000110111011", FibonacciIntegerRangeEncoder.encode(Arrays.asList(2, 3, 4, 5, 6))); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 3, 4, 5, 6)); + Assertions.assertEquals("00000000000110111011", builder.build().toString()); } @Test public void testEncode4() { - Assertions.assertEquals("000000000010001110011011", FibonacciIntegerRangeEncoder.encode(Arrays.asList(2, 5, 6, 7))); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7)); + Assertions.assertEquals("000000000010001110011011", builder.build().toString()); } @Test public void testEncode5() { - Assertions.assertEquals("000000000010001110011011", FibonacciIntegerRangeEncoder.encode(Arrays.asList(6, 7, 2, 5))); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(6, 7, 2, 5)); + Assertions.assertEquals("000000000010001110011011", builder.build().toString()); } @Test public void testEncode6() { - Assertions.assertEquals("0000000000100001110110011", - FibonacciIntegerRangeEncoder.encode(Arrays.asList(3, 5, 6, 7, 8))); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(3, 5, 6, 7, 8)); + Assertions.assertEquals("0000000000100001110110011", builder.build().toString()); } @Test public void testEncode7() { - Assertions.assertEquals("00000000001000111001101011", - FibonacciIntegerRangeEncoder.encode(Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12))); + BitStringBuilder builder = new BitStringBuilder(); + FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12)); + Assertions.assertEquals("00000000001000111001101011", builder.build().toString()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 44dfed0a..188660d1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,43 +14,58 @@ public class FixedBitfieldEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("00", FixedBitfieldEncoder.encode(new ArrayList<>(), 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedBitfieldEncoder.encode(builder, new ArrayList<>(), 2); + Assertions.assertEquals("00", builder.build().toString()); } @Test public void testEncode2() { - Assertions.assertEquals("0", FixedBitfieldEncoder.encode(Arrays.asList(false), 1)); + BitStringBuilder builder = new BitStringBuilder(); + FixedBitfieldEncoder.encode(builder, Arrays.asList(false), 1); + Assertions.assertEquals("0", builder.build().toString()); } @Test public void testEncode3() { - Assertions.assertEquals("1", FixedBitfieldEncoder.encode(Arrays.asList(true), 1)); + BitStringBuilder builder = new BitStringBuilder(); + FixedBitfieldEncoder.encode(builder, Arrays.asList(true), 1); + Assertions.assertEquals("1", builder.build().toString()); } @Test public void testEncode4() { - Assertions.assertEquals("00", FixedBitfieldEncoder.encode(Arrays.asList(false, false), 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedBitfieldEncoder.encode(builder, Arrays.asList(false, false), 2); + Assertions.assertEquals("00", builder.build().toString()); } @Test public void testEncode5() { - Assertions.assertEquals("01", FixedBitfieldEncoder.encode(Arrays.asList(false, true), 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedBitfieldEncoder.encode(builder, Arrays.asList(false, true), 2); + Assertions.assertEquals("01", builder.build().toString()); } @Test public void testEncode6() { - Assertions.assertEquals("10", FixedBitfieldEncoder.encode(Arrays.asList(true, false), 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedBitfieldEncoder.encode(builder, Arrays.asList(true, false), 2); + Assertions.assertEquals("10", builder.build().toString()); } @Test public void testEncode7() { - Assertions.assertEquals("11", FixedBitfieldEncoder.encode(Arrays.asList(true, true), 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedBitfieldEncoder.encode(builder, Arrays.asList(true, true), 2); + Assertions.assertEquals("11", builder.build().toString()); } @Test public void testEncode8() { try { - FixedBitfieldEncoder.encode(Arrays.asList(true, true, true), 2); + BitStringBuilder builder = new BitStringBuilder(); + FixedBitfieldEncoder.encode(builder, Arrays.asList(true, true, true), 2); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index a9c0c765..676c46e6 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -11,33 +12,44 @@ public class FixedIntegerEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("0", FixedIntegerEncoder.encode(0, 1)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerEncoder.encode(builder, 0, 1); + Assertions.assertEquals("0", builder.build().toString()); } @Test public void testEncode2() { - Assertions.assertEquals("000000", FixedIntegerEncoder.encode(0, 6)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerEncoder.encode(builder, 0, 6); + Assertions.assertEquals("000000", builder.build().toString()); } @Test public void testEncode3() { - Assertions.assertEquals("1", FixedIntegerEncoder.encode(1, 1)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerEncoder.encode(builder, 1, 1); + Assertions.assertEquals("1", builder.build().toString()); } @Test public void testEncode4() { - Assertions.assertEquals("0001", FixedIntegerEncoder.encode(1, 4)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerEncoder.encode(builder, 1, 4); + Assertions.assertEquals("0001", builder.build().toString()); } @Test public void testEncode5() { - Assertions.assertEquals("00000111", FixedIntegerEncoder.encode(7, 8)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerEncoder.encode(builder, 7, 8); + Assertions.assertEquals("00000111", builder.build().toString()); } @Test public void testEncode6() { try { - FixedIntegerEncoder.encode(8, 1); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerEncoder.encode(builder, 8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 54f2a1d1..16a70ff4 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -6,6 +6,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,98 +14,135 @@ public class FixedIntegerListEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("0000", FixedIntegerListEncoder.encode(new ArrayList<>(), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, new ArrayList<>(), 2, 2); + Assertions.assertEquals("0000", builder.build().toString()); } @Test public void testEncode2() { - Assertions.assertEquals("0000", FixedIntegerListEncoder.encode(Arrays.asList(0), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(0), 2, 2); + Assertions.assertEquals("0000", builder.build().toString()); } @Test public void testEncode3() { - Assertions.assertEquals("0000", FixedIntegerListEncoder.encode(Arrays.asList(0, 0), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 0), 2, 2); + Assertions.assertEquals("0000", builder.build().toString()); } @Test public void testEncode4() { - Assertions.assertEquals("0001", FixedIntegerListEncoder.encode(Arrays.asList(0, 1), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 1), 2, 2); + Assertions.assertEquals("0001", builder.build().toString()); } @Test public void testEncode5() { - Assertions.assertEquals("0010", FixedIntegerListEncoder.encode(Arrays.asList(0, 2), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 2), 2, 2); + Assertions.assertEquals("0010", builder.build().toString()); } @Test public void testEncode6() { - Assertions.assertEquals("0011", FixedIntegerListEncoder.encode(Arrays.asList(0, 3), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 3), 2, 2); + Assertions.assertEquals("0011", builder.build().toString()); } @Test public void testEncode7() { - Assertions.assertEquals("0100", FixedIntegerListEncoder.encode(Arrays.asList(1, 0), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 0), 2, 2); + Assertions.assertEquals("0100", builder.build().toString()); } @Test public void testEncode8() { - Assertions.assertEquals("0101", FixedIntegerListEncoder.encode(Arrays.asList(1, 1), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 1), 2, 2); + Assertions.assertEquals("0101", builder.build().toString()); } @Test public void testEncode9() { - Assertions.assertEquals("0110", FixedIntegerListEncoder.encode(Arrays.asList(1, 2), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 2), 2, 2); + Assertions.assertEquals("0110", builder.build().toString()); } @Test public void testEncode10() { - Assertions.assertEquals("0111", FixedIntegerListEncoder.encode(Arrays.asList(1, 3), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 3), 2, 2); + Assertions.assertEquals("0111", builder.build().toString()); } @Test public void testEncode11() { - Assertions.assertEquals("1000", FixedIntegerListEncoder.encode(Arrays.asList(2, 0), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 0), 2, 2); + Assertions.assertEquals("1000", builder.build().toString()); } @Test public void testEncode12() { - Assertions.assertEquals("1001", FixedIntegerListEncoder.encode(Arrays.asList(2, 1), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 1), 2, 2); + Assertions.assertEquals("1001", builder.build().toString()); } @Test public void testEncode13() { - Assertions.assertEquals("1010", FixedIntegerListEncoder.encode(Arrays.asList(2, 2), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 2), 2, 2); + Assertions.assertEquals("1010", builder.build().toString()); } @Test public void testEncode14() { - Assertions.assertEquals("1011", FixedIntegerListEncoder.encode(Arrays.asList(2, 3), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 3), 2, 2); + Assertions.assertEquals("1011", builder.build().toString()); } @Test public void testEncode15() { - Assertions.assertEquals("1100", FixedIntegerListEncoder.encode(Arrays.asList(3, 0), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 0), 2, 2); + Assertions.assertEquals("1100", builder.build().toString()); } @Test public void testEncode16() { - Assertions.assertEquals("1101", FixedIntegerListEncoder.encode(Arrays.asList(3, 1), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 1), 2, 2); + Assertions.assertEquals("1101", builder.build().toString()); } @Test public void testEncode17() { - Assertions.assertEquals("1110", FixedIntegerListEncoder.encode(Arrays.asList(3, 2), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 2), 2, 2); + Assertions.assertEquals("1110", builder.build().toString()); } @Test public void testEncode18() { - Assertions.assertEquals("1111", FixedIntegerListEncoder.encode(Arrays.asList(3, 3), 2, 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 3), 2, 2); + Assertions.assertEquals("1111", builder.build().toString()); } @Test public void testEncode19() { try { - FixedIntegerListEncoder.encode(Arrays.asList(3, 3), 1, 1); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 3), 1, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index bccca1c4..1f9b42ba 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -8,61 +8,80 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("000000000000", FixedIntegerRangeEncoder.encode(new ArrayList<>())); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(builder, new ArrayList<>()); + Assertions.assertEquals("000000000000", builder.build().toString()); } @Test public void testEncode2() { - Assertions.assertEquals("00000000000100000000000000010", FixedIntegerRangeEncoder.encode(Arrays.asList(2))); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2)); + Assertions.assertEquals("00000000000100000000000000010", builder.build().toString()); } @Test public void testEncode3() { + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 3, 4, 5, 6)); Assertions.assertEquals("000000000001100000000000000100000000000000110", - FixedIntegerRangeEncoder.encode(Arrays.asList(2, 3, 4, 5, 6))); + builder.build().toString()); } @Test public void testEncode4() { + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7)); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - FixedIntegerRangeEncoder.encode(Arrays.asList(2, 5, 6, 7))); + builder.build().toString()); } @Test public void testEncode5() { + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(builder, Arrays.asList(5, 2, 7, 6)); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - FixedIntegerRangeEncoder.encode(Arrays.asList(5, 2, 7, 6))); + builder.build().toString()); } @Test public void testEncode6() { + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(builder, Arrays.asList(3, 5, 6, 7, 8)); Assertions.assertEquals("00000000001000000000000000011100000000000001010000000000001000", - FixedIntegerRangeEncoder.encode(Arrays.asList(3, 5, 6, 7, 8))); + builder.build().toString()); } @Test public void testEncode7() { + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48)); Assertions.assertEquals("000000000011000000000000011000000000000001100000000000000110000", - FixedIntegerRangeEncoder.encode(Arrays.asList(12, 24, 48))); + builder.build().toString()); } @Test public void testEncode8() { + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48, 49)); Assertions.assertEquals("0000000000110000000000000110000000000000011000100000000001100000000000000110001", - FixedIntegerRangeEncoder.encode(Arrays.asList(12, 24, 48, 49))); + builder.build().toString()); } @Test public void testEncode9() { + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 6, 8, 12, 18, 23, 24, 25, 37, 42)); Assertions.assertEquals( "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010", - FixedIntegerRangeEncoder.encode(Arrays.asList(2, 6, 8, 12, 18, 23, 24, 25, 37, 42))); + builder.build().toString()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index 63bfcc86..653e5066 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -11,39 +12,52 @@ public class FixedLongEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("0", FixedLongEncoder.encode(0, 1)); + BitStringBuilder builder = new BitStringBuilder(); + FixedLongEncoder.encode(builder, 0, 1); + Assertions.assertEquals("0", builder.build().toString()); } @Test public void testEncode2() { - Assertions.assertEquals("000000", FixedLongEncoder.encode(0, 6)); + BitStringBuilder builder = new BitStringBuilder(); + FixedLongEncoder.encode(builder, 0, 6); + Assertions.assertEquals("000000", builder.build().toString()); } @Test public void testEncode3() { - Assertions.assertEquals("1", FixedLongEncoder.encode(1, 1)); + BitStringBuilder builder = new BitStringBuilder(); + FixedLongEncoder.encode(builder, 1, 1); + Assertions.assertEquals("1", builder.build().toString()); } @Test public void testEncode4() { - Assertions.assertEquals("0001", FixedLongEncoder.encode(1, 4)); + BitStringBuilder builder = new BitStringBuilder(); + FixedLongEncoder.encode(builder, 1, 4); + Assertions.assertEquals("0001", builder.build().toString()); } @Test public void testEncode5() { - Assertions.assertEquals("00000111", FixedLongEncoder.encode(7, 8)); + BitStringBuilder builder = new BitStringBuilder(); + FixedLongEncoder.encode(builder, 7, 8); + Assertions.assertEquals("00000111", builder.build().toString()); } @Test public void testEncode6() { - Assertions.assertEquals("001111011111010001110101111011110101", FixedLongEncoder.encode(16630898421L, 36)); + BitStringBuilder builder = new BitStringBuilder(); + FixedLongEncoder.encode(builder, 16630898421L, 36); + Assertions.assertEquals("001111011111010001110101111011110101", builder.build().toString()); } @Test public void testEncode7() { try { - FixedIntegerEncoder.encode(8, 1); + BitStringBuilder builder = new BitStringBuilder(); + FixedIntegerEncoder.encode(builder, 8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index 29e01d04..bc904371 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -11,18 +12,23 @@ public class FixedStringEncoderTest { @Test public void testEncode1() { - Assertions.assertEquals("000000000001", FixedStringEncoder.encode("AB", 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedStringEncoder.encode(builder, "AB", 2); + Assertions.assertEquals("000000000001", builder.build().toString()); } @Test public void testEncode2() { - Assertions.assertEquals("100000111111", FixedStringEncoder.encode("a", 2)); + BitStringBuilder builder = new BitStringBuilder(); + FixedStringEncoder.encode(builder, "a", 2); + Assertions.assertEquals("100000111111", builder.build().toString()); } @Test public void testEncode3() { try { - FixedStringEncoder.encode("1", 2); + BitStringBuilder builder = new BitStringBuilder(); + FixedStringEncoder.encode(builder, "1", 2); Assertions.fail("DecodingException expected"); } catch (EncodingException e) { From 4da705c52def012b8223867cc386fe8a268b4504 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 25 Mar 2025 16:03:09 -0400 Subject: [PATCH 013/146] use BitSet to represent List --- .../java/com/iab/gpp/encoder/GppModel.java | 1 - .../EncodableFibonacciIntegerRange.java | 3 +- .../datatype/EncodableFixedBitfield.java | 3 +- .../datatype/EncodableFixedIntegerList.java | 3 +- .../datatype/EncodableFixedIntegerRange.java | 3 +- .../datatype/EncodableFlexibleBitfield.java | 3 +- .../EncodableOptimizedFibonacciRange.java | 3 +- .../EncodableOptimizedFixedRange.java | 3 +- .../encoder/FibonacciIntegerRangeEncoder.java | 16 ++-- .../encoder/FixedIntegerRangeEncoder.java | 18 ++-- .../encoder/datatype/encoder/IntegerList.java | 84 +++++++++++++++++++ .../OptimizedFibonacciRangeEncoder.java | 8 +- .../encoder/OptimizedFixedRangeEncoder.java | 8 +- 13 files changed, 116 insertions(+), 40 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerList.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index e8e66dd2..b5cdfb20 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -5,7 +5,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index ed2afb56..ec1f1115 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.TreeSet; @@ -69,6 +70,6 @@ public void setValue(Object value) { @Override public List getValue() { - return new ArrayList<>(super.getValue()); + return Collections.unmodifiableList(super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index e5dafae7..cbbf9c9a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -69,6 +70,6 @@ public void setValue(Object value) { @Override public List getValue() { - return new ArrayList<>(super.getValue()); + return Collections.unmodifiableList(super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index dd6f1dfa..511a7458 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -73,6 +74,6 @@ public void setValue(Object value) { @Override public List getValue() { - return new ArrayList<>(super.getValue()); + return Collections.unmodifiableList(super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 506ee725..c73a576e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.TreeSet; @@ -68,6 +69,6 @@ public void setValue(Object value) { @Override public List getValue() { - return new ArrayList<>(super.getValue()); + return Collections.unmodifiableList(super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index d15b9f23..43c4e67a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.function.IntSupplier; @@ -71,6 +72,6 @@ public void setValue(Object value) { @Override public List getValue() { - return new ArrayList<>(super.getValue()); + return Collections.unmodifiableList(super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java index 01bae044..85c58b69 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.TreeSet; @@ -67,6 +68,6 @@ public void setValue(Object value) { @Override public List getValue() { - return new ArrayList<>(super.getValue()); + return Collections.unmodifiableList(super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index b8df976b..8efddc66 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.TreeSet; @@ -68,6 +69,6 @@ public void setValue(Object value) { @Override public List getValue() { - return new ArrayList<>(super.getValue()); + return Collections.unmodifiableList(super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index d60636b5..2c6f7b9d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.ArrayList; +import java.util.BitSet; import java.util.Collections; import java.util.List; @@ -53,7 +54,7 @@ public static List decode(BitString bitString) throws DecodingException } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - List value = new ArrayList<>(count); + BitSet value = new BitSet(); int offset = 0; int startIndex = 12; @@ -71,23 +72,16 @@ public static List decode(BitString bitString) throws DecodingException int end = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = end; startIndex = index + 2; - - if (value.size() + (end - start) > MAX_SIZE) { - LOGGER.warning("FibonacciIntegerRange has too many values"); - break; - } - for (int j = start; j <= end; j++) { - value.add(IntegerCache.valueOf(j)); - } + value.set(start, end + 1); } else { int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); int val = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = val; - value.add(IntegerCache.valueOf(val)); + value.set(val); startIndex = index + 2; } } - return value; + return new IntegerList(value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index fc8b6c2f..201262c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.ArrayList; +import java.util.BitSet; import java.util.Collections; import java.util.List; @@ -46,7 +47,7 @@ public static List decode(BitString bitString) throws DecodingException } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - List value = new ArrayList<>(count); + BitSet value = new BitSet(); int startIndex = 12; for (int i = 0; i < count; i++) { boolean group = BooleanEncoder.decode(bitString, startIndex, 1); @@ -59,23 +60,14 @@ public static List decode(BitString bitString) throws DecodingException int end = FixedIntegerEncoder.decode(bitString, startIndex, 16); startIndex += 16; - if (end < start) { - throw new DecodingException("FixedIntegerRange has invalid range"); - } - if (value.size() + (end - start) > MAX_SIZE) { - LOGGER.warning("FixedIntegerRange has too many values"); - break; - } - for (int j = start; j <= end; j++) { - value.add(IntegerCache.valueOf(j)); - } + value.set(start, end + 1); } else { int val = FixedIntegerEncoder.decode(bitString, startIndex, 16); - value.add(IntegerCache.valueOf(val)); + value.set(val); startIndex += 16; } } - return value; + return new IntegerList(value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerList.java new file mode 100644 index 00000000..a2ac8e36 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerList.java @@ -0,0 +1,84 @@ +package com.iab.gpp.encoder.datatype.encoder; + +import java.util.AbstractList; +import java.util.BitSet; +import java.util.Comparator; +import java.util.NoSuchElementException; +import java.util.PrimitiveIterator.OfInt; + +final class IntegerList extends AbstractList { + + private static final int UNKNOWN = -1; + + private final BitSet bitSet; + // Lazily initiate + private int size; + private int[] array; + + IntegerList(BitSet bitSet) { + this.size = UNKNOWN; + this.bitSet = bitSet; + } + + @Override + public int size() { + int theSize = this.size; + if (theSize == UNKNOWN) { + theSize = bitSet.isEmpty() ? 0 : bitSet.cardinality(); + this.size = theSize; + } + return size; + } + + @Override + public boolean contains(Object o) { + return o instanceof Integer && bitSet.get((Integer) o); + } + + @Override + public void sort(Comparator c) { + // This is already sorted + } + + @Override + public OfInt iterator(){ + return new OfInt() { + int cursor = bitSet.nextSetBit(0); + + @Override + public boolean hasNext() { + return cursor != -1; + } + + @Override + public Integer next() { + return IntegerCache.valueOf(nextInt()); + } + + @Override + public int nextInt() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + int next = cursor; + cursor = bitSet.nextSetBit(cursor + 1); + return next; + } + }; + } + + @Override + public Integer get(int index) { + int[] theArray = this.array; + if (theArray == null) { + // Lazily construct a backing array + theArray = new int[size()]; + int count = 0; + for (OfInt it = iterator(); it.hasNext();) { + theArray[count++] = it.nextInt(); + } + array = theArray; + } + return IntegerCache.valueOf(theArray[index]); + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index e505008d..e347650a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.ArrayList; +import java.util.BitSet; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -47,13 +47,13 @@ public static List decode(BitString bitString) throws DecodingException } else { BitString bits = bitString.substring(17); int length = bits.length(); - List value = new ArrayList<>(length); + BitSet value = new BitSet(length + 1); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { - value.add(IntegerCache.valueOf(i + 1)); + value.set(i + 1); } } - return value; + return new IntegerList(value); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 52ebaee9..00f02231 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.ArrayList; +import java.util.BitSet; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -47,13 +47,13 @@ public static List decode(BitString bitString) throws DecodingException } else { BitString bits = bitString.substring(17); int length = bits.length(); - List value = new ArrayList<>(length); + BitSet value = new BitSet(length + 1); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { - value.add(IntegerCache.valueOf(i + 1)); + value.set(i + 1); } } - return value; + return new IntegerList(value); } } } From c83f58dff5cf70adb7d24ff836d62364cf18244e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 25 Mar 2025 17:00:38 -0400 Subject: [PATCH 014/146] initialize segments once --- .../iab/gpp/encoder/section/AbstractLazilyEncodableSection.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/HeaderV1.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsCa.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsCo.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsCt.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsDe.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsFl.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsIa.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsMt.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsNat.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsNe.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsNh.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsNj.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsOr.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsTn.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsTx.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsUt.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UsVa.java | 2 -- .../src/main/java/com/iab/gpp/encoder/section/UspV1.java | 2 -- 21 files changed, 1 insertion(+), 41 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 917da593..c3753e7b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -6,7 +6,7 @@ public abstract class AbstractLazilyEncodableSection implements EncodableSection { - private List segments; + protected List segments; private CharSequence encodedString = null; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 8adc4598..d7af346f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -44,8 +44,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index c3e7ba4e..d6897f80 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -51,8 +51,6 @@ protected List initializeSegments() { @Override public List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index f0dd66ea..eab8b631 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -52,8 +52,6 @@ protected List initializeSegments() { @Override public List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index a1a8cbe8..6d6f4d6d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index f6b8c169..b24cd823 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index dc328d47..d9ec320d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index a8ecdba0..1fb83b3f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 2141ded9..66b94b44 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -44,8 +44,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 0f86ce32..6b047eed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 9197da64..2f01dd77 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 37c9aa66..cdb20508 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 24657bab..1a954a19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 649e21fa..ac649ed8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index d08ec5db..94da4102 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index cb11263d..e9b5eede 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index f19c5d7d..2799c54a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index c1ff2d1f..da567078 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -45,8 +45,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 3e360e00..3db50b9a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -44,8 +44,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 6b84ee85..4a7b18b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -44,8 +44,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index eb7d8eb7..d48e4b2d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -44,8 +44,6 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - List segments = initializeSegments(); - if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); From d30798b43a9d99b35b3e573f45cf7cf9e80a292f Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 28 Mar 2025 11:28:30 -0400 Subject: [PATCH 015/146] more efficient grouping in range encoders --- .../encoder/FibonacciIntegerRangeEncoder.java | 59 ++++++++++--------- .../encoder/FixedIntegerRangeEncoder.java | 50 ++++++++-------- 2 files changed, 57 insertions(+), 52 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 2c6f7b9d..db29296f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.ArrayList; import java.util.BitSet; import java.util.Collections; import java.util.List; @@ -13,38 +12,40 @@ public class FibonacciIntegerRangeEncoder { public static void encode(BitStringBuilder builder, List value) { Collections.sort(value); - - List> groups = new ArrayList<>(); - + BitStringBuilder rangeBuilder = new BitStringBuilder(); + int groupStart = -1; + int last = Integer.MIN_VALUE; int offset = 0; - int groupStartIndex = 0; - while (groupStartIndex < value.size()) { - int groupEndIndex = groupStartIndex; - while (groupEndIndex < value.size() - 1 && value.get(groupEndIndex) + 1 == value.get(groupEndIndex + 1)) { - groupEndIndex++; + int groupCount = 0; + for (Integer item : value) { + if (last != (item - 1)) { + if (groupStart > 0) { + groupCount++; + writeGroup(rangeBuilder, groupStart, last, offset); + offset = last; + } + groupStart = item; } - - groups.add(value.subList(groupStartIndex, groupEndIndex + 1)); - - groupStartIndex = groupEndIndex + 1; + last = item; } + if (groupStart > 0) { + groupCount++; + writeGroup(rangeBuilder, groupStart, last, offset); + } + FixedIntegerEncoder.encode(builder,groupCount, 12); + builder.append(rangeBuilder); + } - FixedIntegerEncoder.encode(builder,groups.size(), 12); - for (int i = 0; i < groups.size(); i++) { - if (groups.get(i).size() == 1) { - int v = groups.get(i).get(0) - offset; - offset = groups.get(i).get(0); - builder.append(false); - FibonacciIntegerEncoder.encode(builder, v); - } else { - int startVal = groups.get(i).get(0) - offset; - offset = groups.get(i).get(0); - int endVal = groups.get(i).get(groups.get(i).size() - 1) - offset; - offset = groups.get(i).get(groups.get(i).size() - 1); - builder.append(true); - FibonacciIntegerEncoder.encode(builder, startVal); - FibonacciIntegerEncoder.encode(builder, endVal); - } + private static void writeGroup(BitStringBuilder builder, int groupStart, int last, int offset) { + int base = groupStart - offset; + int span = last - groupStart; + if (span == 0) { + builder.append(false); + FibonacciIntegerEncoder.encode(builder, base); + } else { + builder.append(true); + FibonacciIntegerEncoder.encode(builder, base); + FibonacciIntegerEncoder.encode(builder, span); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 201262c3..e6c2a57c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.ArrayList; import java.util.BitSet; import java.util.Collections; import java.util.List; @@ -13,31 +12,36 @@ public class FixedIntegerRangeEncoder { public static void encode(BitStringBuilder builder, List value) { Collections.sort(value); - - List> groups = new ArrayList<>(); - - int groupStartIndex = 0; - while (groupStartIndex < value.size()) { - int groupEndIndex = groupStartIndex; - while (groupEndIndex < value.size() - 1 && value.get(groupEndIndex) + 1 == value.get(groupEndIndex + 1)) { - groupEndIndex++; + BitStringBuilder rangeBuilder = new BitStringBuilder(); + int groupStart = -1; + int last = Integer.MIN_VALUE; + int groupCount = 0; + for (Integer item : value) { + if (last != (item - 1)) { + if (groupStart > 0) { + groupCount++; + writeGroup(rangeBuilder, groupStart, last); + } + groupStart = item; } - - groups.add(value.subList(groupStartIndex, groupEndIndex + 1)); - - groupStartIndex = groupEndIndex + 1; + last = item; } + if (groupStart > 0) { + groupCount++; + writeGroup(rangeBuilder, groupStart, last); + } + FixedIntegerEncoder.encode(builder,groupCount, 12); + builder.append(rangeBuilder); + } - FixedIntegerEncoder.encode(builder, groups.size(), 12); - for (int i = 0; i < groups.size(); i++) { - if (groups.get(i).size() == 1) { - builder.append(false); - FixedIntegerEncoder.encode(builder, groups.get(i).get(0), 16); - } else { - builder.append(true); - FixedIntegerEncoder.encode(builder, groups.get(i).get(0), 16); - FixedIntegerEncoder.encode(builder, groups.get(i).get(groups.get(i).size() - 1), 16); - } + private static void writeGroup(BitStringBuilder builder, int groupStart, int last) { + if (groupStart == last) { + builder.append(false); + FixedIntegerEncoder.encode(builder, groupStart, 16); + } else { + builder.append(true); + FixedIntegerEncoder.encode(builder, groupStart, 16); + FixedIntegerEncoder.encode(builder, last, 16); } } From dcc958d6d5235da6bcfa6ad7d0f07789a1a606f3 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 28 Mar 2025 14:18:40 -0400 Subject: [PATCH 016/146] store fields in list instead of map --- .../iab/gpp/encoder/bitstring/BitString.java | 4 ++ .../encoder/bitstring/BitStringEncoder.java | 20 ++++---- .../encoder/datatype/UnencodableBoolean.java | 28 +++++++++++ .../field/EncodableBitStringFields.java | 26 ++-------- .../com/iab/gpp/encoder/field/FieldNames.java | 36 +++++++++++++ .../com/iab/gpp/encoder/field/Fields.java | 50 ++++++++++++++++--- .../iab/gpp/encoder/field/GenericFields.java | 26 ++-------- .../iab/gpp/encoder/field/HeaderV1Field.java | 7 +-- .../iab/gpp/encoder/field/TcfCaV1Field.java | 19 +++---- .../iab/gpp/encoder/field/TcfEuV2Field.java | 25 ++++------ .../com/iab/gpp/encoder/field/UsCaField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsCoField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsCtField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsDeField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsFlField.java | 7 +-- .../com/iab/gpp/encoder/field/UsIaField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsMtField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsNatField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsNeField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsNhField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsNjField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsOrField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsTnField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsTxField.java | 12 ++--- .../com/iab/gpp/encoder/field/UsUtField.java | 7 +-- .../com/iab/gpp/encoder/field/UsVaField.java | 7 +-- .../com/iab/gpp/encoder/field/UspV1Field.java | 7 +-- .../AbstractLazilyEncodableSection.java | 4 +- .../AbstractLazilyEncodableSegment.java | 1 - .../gpp/encoder/segment/EncodableSegment.java | 6 --- .../encoder/segment/HeaderV1CoreSegment.java | 12 ++--- .../encoder/segment/TcfCaV1CoreSegment.java | 12 ++--- .../TcfCaV1DisclosedVendorsSegment.java | 12 ++--- .../TcfCaV1PublisherPurposesSegment.java | 12 ++--- .../encoder/segment/TcfEuV2CoreSegment.java | 12 ++--- .../TcfEuV2PublisherPurposesSegment.java | 12 ++--- .../segment/TcfEuV2VendorsAllowedSegment.java | 12 ++--- .../TcfEuV2VendorsDisclosedSegment.java | 12 ++--- .../gpp/encoder/segment/UsCaCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsCaGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsCoCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsCoGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsCtCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsCtGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsDeCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsDeGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsFlCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsIaCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsIaGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsMtCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsMtGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsNatCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsNatGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsNeCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsNeGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsNhCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsNhGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsNjCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsNjGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsOrCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsOrGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsTnCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsTnGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsTxCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsTxGpcSegment.java | 15 ++---- .../gpp/encoder/segment/UsUtCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UsVaCoreSegment.java | 12 ++--- .../gpp/encoder/segment/UspV1CoreSegment.java | 8 +-- 68 files changed, 361 insertions(+), 566 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 8232262d..5b1ef6ae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -10,6 +10,7 @@ public final class BitString extends AbstractList { public static final char FALSE = '0'; public static final String TRUE_STRING = new String(new char[] {TRUE}); public static final String FALSE_STRING = new String(new char[] {FALSE}); + private static final BitString EMPTY = new BitString(new BitSet(), 0, 0); private final BitSet bitSet; private final int from; @@ -22,6 +23,9 @@ public final class BitString extends AbstractList { } public static final BitString empty(int size) { + if (size == 0) { + return EMPTY; + } return new BitString(new BitSet(size), 0, size); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java index 1bb9e648..e2766179 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java @@ -19,26 +19,26 @@ public static BitStringEncoder getInstance() { return instance; } - public BitStringBuilder encode(EncodableBitStringFields fields, List fieldNames) { + public BitStringBuilder encode(EncodableBitStringFields fields) { BitStringBuilder bitString = new BitStringBuilder(); + List fieldNames = fields.getNames(); for (int i = 0; i < fieldNames.size(); i++) { - String fieldName = fieldNames.get(i); - AbstractEncodableBitStringDataType field = fields.get(fieldName); + AbstractEncodableBitStringDataType field = fields.get(i); if (field != null) { field.encode(bitString); } else { - throw new EncodingException("Field not found: '" + fieldName + "'"); + throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); } } return bitString; } - public void decode(BitString bitString, List fieldNames, EncodableBitStringFields fields) { + public void decode(BitString bitString, EncodableBitStringFields fields) { int index = 0; + List fieldNames = fields.getNames(); for (int i = 0; i < fieldNames.size(); i++) { - String fieldName = fieldNames.get(i); - AbstractEncodableBitStringDataType field = fields.get(fieldName); + AbstractEncodableBitStringDataType field = fields.get(i); if (field != null) { try { BitString substring = field.substring(bitString, index); @@ -46,15 +46,15 @@ public void decode(BitString bitString, List fieldNames, EncodableBitStr index += substring.length(); } catch (SubstringException e) { if(field.getHardFailIfMissing()) { - throw new DecodingException("Unable to decode " + fieldName, e); + throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } else { return; } } catch (Exception e) { - throw new DecodingException("Unable to decode " + fieldName, e); + throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } } else { - throw new DecodingException("Field not found: '" + fieldName + "'"); + throw new DecodingException("Field not found: '" + fieldNames.get(i) + "'"); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java new file mode 100644 index 00000000..0240c9a8 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -0,0 +1,28 @@ +package com.iab.gpp.encoder.datatype; + +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; + +public class UnencodableBoolean extends AbstractEncodableBitStringDataType { + + protected UnencodableBoolean() { + super(true); + } + + public UnencodableBoolean(Boolean value) { + super(true); + setValue(value); + } + + public void encode(BitStringBuilder builder){ + // pass + } + + public void decode(BitString bitString) { + // pass + } + + public BitString substring(BitString bitString, int fromIndex) throws SubstringException { + return BitString.empty(0); + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java index d2ac0f43..f4286505 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java @@ -1,31 +1,11 @@ package com.iab.gpp.encoder.field; -import java.util.HashMap; -import java.util.Map; import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; -public class EncodableBitStringFields implements Fields> { +public class EncodableBitStringFields extends Fields> { - private Map> fields = new HashMap<>(); - - public boolean containsKey(String key) { - return this.fields.containsKey(key); - } - - public void put(String key, AbstractEncodableBitStringDataType value) { - this.fields.put(key, value); - } - - public AbstractEncodableBitStringDataType get(String key) { - return this.fields.get(key); - } - - public Map> getAll() { - return new HashMap<>(this.fields); + public EncodableBitStringFields(FieldNames fieldNames) { + super(fieldNames); } - public void reset(Fields> fields) { - this.fields.clear(); - this.fields.putAll(fields.getAll()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java new file mode 100644 index 00000000..0d87eaab --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -0,0 +1,36 @@ +package com.iab.gpp.encoder.field; + +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public final class FieldNames { + + private final List list; + private final Map map; + + FieldNames(String... names) { + this.list = Collections.unmodifiableList(Arrays.asList(names)); + this.map = new LinkedHashMap<>(); + for (int i = 0; i < names.length; i++) { + this.map.put(names[i], i); + } + } + + public boolean contains(String name) { + return map.containsKey(name); + } + + static final FieldNames of(String... names) { + return new FieldNames(names); + } + + public List getNames() { + return list; + } + public Integer convertKey(String key) { + return map.get(key); + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java index ca091e7f..db3446bf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java @@ -1,14 +1,50 @@ package com.iab.gpp.encoder.field; -import java.util.Map; +import java.util.List; import com.iab.gpp.encoder.datatype.DataType; -public interface Fields> { +public abstract class Fields> { - boolean containsKey(String key); - void put(String key, T value); - T get(String key); - Map getAll(); - void reset(Fields fields); + private final FieldNames fieldNames; + private final Object[] values; + protected Fields(FieldNames fieldNames) { + this.fieldNames = fieldNames; + this.values = new Object[fieldNames.getNames().size()]; + } + + public List getNames() { + return fieldNames.getNames(); + } + + public boolean containsKey(String key) { + Integer index = fieldNames.convertKey(key); + return index != null && values[index] != null; + } + + public void put(String key, T value) { + Integer index = fieldNames.convertKey(key); + if (index != null) { + values[index] = value; + } + } + + @SuppressWarnings("unchecked") + public T get(int index) { + return (T) values[index]; + } + + public T get(String key) { + Integer index = fieldNames.convertKey(key); + if (index != null) { + return get(index); + } + return null; + } + + public void reset(Fields fields) { + for (String name : fieldNames.getNames()) { + put(name, fields.get(name)); + } + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java index 00263e55..078b5116 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java @@ -1,31 +1,11 @@ package com.iab.gpp.encoder.field; -import java.util.HashMap; -import java.util.Map; import com.iab.gpp.encoder.datatype.DataType; -public class GenericFields implements Fields> { +public class GenericFields extends Fields> { - private Map> fields = new HashMap<>(); - - public boolean containsKey(String key) { - return this.fields.containsKey(key); - } - - public void put(String key, DataType value) { - this.fields.put(key, value); - } - - public DataType get(String key) { - return this.fields.get(key); - } - - public Map> getAll() { - return new HashMap<>(this.fields); + public GenericFields(FieldNames fieldNames) { + super(fieldNames); } - public void reset(Fields> fields) { - this.fields.clear(); - this.fields.putAll(fields.getAll()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index fcf35a10..22022d2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class HeaderV1Field { public static final String ID = "Id"; @@ -10,11 +7,11 @@ public class HeaderV1Field { public static final String SECTION_IDS = "SectionIds"; //@formatter:off - public static final List HEADER_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS - }); + ); //@formatter:on diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 2ab0b31d..070bd884 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class TcfCaV1Field { public static final String VERSION = "Version"; @@ -33,7 +30,7 @@ public class TcfCaV1Field { public static final String DISCLOSED_VENDORS = "DisclosedVendors"; //@formatter:off - public static final List TCFCAV1_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.VERSION, TcfCaV1Field.CREATED, TcfCaV1Field.LAST_UPDATED, @@ -50,24 +47,24 @@ public class TcfCaV1Field { TcfCaV1Field.VENDOR_EXPRESS_CONSENT, TcfCaV1Field.VENDOR_IMPLIED_CONSENT, TcfCaV1Field.PUB_RESTRICTIONS - }); + ); //@formatter:on //@formatter:off - public static final List TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, TcfCaV1Field.NUM_CUSTOM_PURPOSES, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, - }); + TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT + ); //@formatter:on //@formatter:off - public static final List TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, - TcfCaV1Field.DISCLOSED_VENDORS, - }); + TcfCaV1Field.DISCLOSED_VENDORS + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 83abe181..afe7d54a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class TcfEuV2Field { public static final String VERSION = "Version"; @@ -36,7 +33,7 @@ public class TcfEuV2Field { public static final String VENDORS_DISCLOSED = "VendorsDisclosed"; //@formatter:off - public static final List TCFEUV2_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VERSION, TcfEuV2Field.CREATED, TcfEuV2Field.LAST_UPDATED, @@ -56,31 +53,31 @@ public class TcfEuV2Field { TcfEuV2Field.VENDOR_CONSENTS, TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, TcfEuV2Field.PUBLISHER_RESTRICTIONS - }); + ); //@formatter:on //@formatter:off - public static final List TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, TcfEuV2Field.PUBLISHER_CONSENTS, TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, TcfEuV2Field.NUM_CUSTOM_PURPOSES, TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS, - TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS, - }); + TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS + ); //@formatter:on //@formatter:off - public static final List TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, - TcfEuV2Field.VENDORS_ALLOWED, - }); + TcfEuV2Field.VENDORS_ALLOWED + ); //@formatter:on //@formatter:off - public static final List TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, - TcfEuV2Field.VENDORS_DISCLOSED, - }); + TcfEuV2Field.VENDORS_DISCLOSED + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index f19d81a0..e7405170 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsCaField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsCaField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USCA_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCaField.VERSION, UsCaField.SALE_OPT_OUT_NOTICE, UsCaField.SHARING_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsCaField { UsCaField.MSPA_COVERED_TRANSACTION, UsCaField.MSPA_OPT_OUT_OPTION_MODE, UsCaField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USCA_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCaField.GPC_SEGMENT_TYPE, + UsCaField.GPC_SEGMENT_INCLUDED, UsCaField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index bc6af959..83adb29e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsCoField { public static final String VERSION = "Version"; @@ -22,7 +19,7 @@ public class UsCoField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USCO_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCoField.VERSION, UsCoField.SHARING_NOTICE, UsCoField.SALE_OPT_OUT_NOTICE, @@ -34,13 +31,14 @@ public class UsCoField { UsCoField.MSPA_COVERED_TRANSACTION, UsCoField.MSPA_OPT_OUT_OPTION_MODE, UsCoField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USCO_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCoField.GPC_SEGMENT_TYPE, + UsCoField.GPC_SEGMENT_INCLUDED, UsCoField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index be7d112e..705deb7f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsCtField { public static final String VERSION = "Version"; @@ -22,7 +19,7 @@ public class UsCtField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USCT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCtField.VERSION, UsCtField.SHARING_NOTICE, UsCtField.SALE_OPT_OUT_NOTICE, @@ -34,13 +31,14 @@ public class UsCtField { UsCtField.MSPA_COVERED_TRANSACTION, UsCtField.MSPA_OPT_OUT_OPTION_MODE, UsCtField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USCT_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCtField.GPC_SEGMENT_TYPE, + UsCtField.GPC_SEGMENT_INCLUDED, UsCtField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 7f5ca3ef..1b9e7946 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsDeField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsDeField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USDE_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsDeField.VERSION, UsDeField.PROCESSING_NOTICE, UsDeField.SALE_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsDeField { UsDeField.MSPA_COVERED_TRANSACTION, UsDeField.MSPA_OPT_OUT_OPTION_MODE, UsDeField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USDE_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsDeField.GPC_SEGMENT_TYPE, + UsDeField.GPC_SEGMENT_INCLUDED, UsDeField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 9c19f6cb..aab9c6fb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsFlField { public static final String VERSION = "Version"; @@ -19,7 +16,7 @@ public class UsFlField { public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; //@formatter:off - public static final List USFL_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsFlField.VERSION, UsFlField.PROCESSING_NOTICE, UsFlField.SALE_OPT_OUT_NOTICE, @@ -32,6 +29,6 @@ public class UsFlField { UsFlField.MSPA_COVERED_TRANSACTION, UsFlField.MSPA_OPT_OUT_OPTION_MODE, UsFlField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index 4f9ceccb..f362faff 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsIaField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsIaField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USIA_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsIaField.VERSION, UsIaField.PROCESSING_NOTICE, UsIaField.SALE_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsIaField { UsIaField.MSPA_COVERED_TRANSACTION, UsIaField.MSPA_OPT_OUT_OPTION_MODE, UsIaField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USIA_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsIaField.GPC_SEGMENT_TYPE, + UsIaField.GPC_SEGMENT_INCLUDED, UsIaField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 42243e83..29cae31f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsMtField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsMtField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USMT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsMtField.VERSION, UsMtField.SHARING_NOTICE, UsMtField.SALE_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsMtField { UsMtField.MSPA_COVERED_TRANSACTION, UsMtField.MSPA_OPT_OUT_OPTION_MODE, UsMtField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static List USMT_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsMtField.GPC_SEGMENT_TYPE, + UsMtField.GPC_SEGMENT_INCLUDED, UsMtField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index a1b34fa9..794a08af 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsNatField { public static final String VERSION = "Version"; @@ -27,7 +24,7 @@ public class UsNatField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USNAT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNatField.VERSION, UsNatField.SHARING_NOTICE, UsNatField.SALE_OPT_OUT_NOTICE, @@ -44,13 +41,14 @@ public class UsNatField { UsNatField.MSPA_COVERED_TRANSACTION, UsNatField.MSPA_OPT_OUT_OPTION_MODE, UsNatField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USNAT_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNatField.GPC_SEGMENT_TYPE, + UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 6f4735a1..ebf70be4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsNeField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsNeField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USNE_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNeField.VERSION, UsNeField.PROCESSING_NOTICE, UsNeField.SALE_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsNeField { UsNeField.MSPA_COVERED_TRANSACTION, UsNeField.MSPA_OPT_OUT_OPTION_MODE, UsNeField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USNE_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNeField.GPC_SEGMENT_TYPE, + UsNeField.GPC_SEGMENT_INCLUDED, UsNeField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 08e73299..69ea1ff6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsNhField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsNhField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USNH_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNhField.VERSION, UsNhField.PROCESSING_NOTICE, UsNhField.SALE_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsNhField { UsNhField.MSPA_COVERED_TRANSACTION, UsNhField.MSPA_OPT_OUT_OPTION_MODE, UsNhField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USNH_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNhField.GPC_SEGMENT_TYPE, + UsNhField.GPC_SEGMENT_INCLUDED, UsNhField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index da4c4ca3..6c7eab42 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsNjField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsNjField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USNJ_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNjField.VERSION, UsNjField.PROCESSING_NOTICE, UsNjField.SALE_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsNjField { UsNjField.MSPA_COVERED_TRANSACTION, UsNjField.MSPA_OPT_OUT_OPTION_MODE, UsNjField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USNJ_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNjField.GPC_SEGMENT_TYPE, + UsNjField.GPC_SEGMENT_INCLUDED, UsNjField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index a1ea3d6d..d59b7a00 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsOrField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsOrField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USOR_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsOrField.VERSION, UsOrField.PROCESSING_NOTICE, UsOrField.SALE_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsOrField { UsOrField.MSPA_COVERED_TRANSACTION, UsOrField.MSPA_OPT_OUT_OPTION_MODE, UsOrField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static List USOR_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsOrField.GPC_SEGMENT_TYPE, + UsOrField.GPC_SEGMENT_INCLUDED, UsOrField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index d3963387..475ea7f3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsTnField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsTnField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USTN_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsTnField.VERSION, UsTnField.PROCESSING_NOTICE, UsTnField.SALE_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsTnField { UsTnField.MSPA_COVERED_TRANSACTION, UsTnField.MSPA_OPT_OUT_OPTION_MODE, UsTnField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static final List USTN_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsTnField.GPC_SEGMENT_TYPE, + UsTnField.GPC_SEGMENT_INCLUDED, UsTnField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 413b0167..04ff497c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsTxField { public static final String VERSION = "Version"; @@ -23,7 +20,7 @@ public class UsTxField { public static final String GPC = "Gpc"; //@formatter:off - public static final List USTX_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsTxField.VERSION, UsTxField.PROCESSING_NOTICE, UsTxField.SALE_OPT_OUT_NOTICE, @@ -36,13 +33,14 @@ public class UsTxField { UsTxField.MSPA_COVERED_TRANSACTION, UsTxField.MSPA_OPT_OUT_OPTION_MODE, UsTxField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on //@formatter:off - public static List USTX_GPC_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsTxField.GPC_SEGMENT_TYPE, + UsTxField.GPC_SEGMENT_INCLUDED, UsTxField.GPC - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index afd544ea..2670178a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsUtField { public static final String VERSION = "Version"; @@ -19,7 +16,7 @@ public class UsUtField { public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; //@formatter:off - public static final List USUT_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsUtField.VERSION, UsUtField.SHARING_NOTICE, UsUtField.SALE_OPT_OUT_NOTICE, @@ -32,6 +29,6 @@ public class UsUtField { UsUtField.MSPA_COVERED_TRANSACTION, UsUtField.MSPA_OPT_OUT_OPTION_MODE, UsUtField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 900116b4..fd0df4c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UsVaField { public static final String VERSION = "Version"; @@ -18,7 +15,7 @@ public class UsVaField { public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; //@formatter:off - public static final List USVA_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsVaField.VERSION, UsVaField.SHARING_NOTICE, UsVaField.SALE_OPT_OUT_NOTICE, @@ -30,6 +27,6 @@ public class UsVaField { UsVaField.MSPA_COVERED_TRANSACTION, UsVaField.MSPA_OPT_OUT_OPTION_MODE, UsVaField.MSPA_SERVICE_PROVIDER_MODE - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index cc55f2b0..07da31d3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.List; - public class UspV1Field { public static final String VERSION = "Version"; @@ -11,11 +8,11 @@ public class UspV1Field { public static final String LSPA_COVERED = "LspaCovered"; //@formatter:off - public static List USPV1_CORE_SEGMENT_FIELD_NAMES = Arrays.asList(new String[] { + public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UspV1Field.VERSION, UspV1Field.NOTICE, UspV1Field.OPT_OUT_SALE, UspV1Field.LSPA_COVERED - }); + ); //@formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index c3753e7b..cc20d838 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -31,8 +31,8 @@ public boolean hasField(String fieldName) { } for(EncodableSegment segment : segments) { - if(segment.getFieldNames().contains(fieldName)) { - return segment.hasField(fieldName); + if (segment.hasField(fieldName)) { + return true; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 6e2ea304..db955748 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -73,7 +73,6 @@ public void setFieldValue(String fieldName, Object value) { public String encode() { if (this.encodedString == null || this.encodedString.length() == 0 || this.dirty) { - this.validate(); this.encodedString = encodeSegment(this.fields); this.dirty = false; this.decoded = true; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index f4b4a354..40c3e5bf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,11 +1,7 @@ package com.iab.gpp.encoder.segment; -import java.util.List; - public interface EncodableSegment { - List getFieldNames(); - boolean hasField(String fieldName); Object getFieldValue(String fieldName); @@ -15,6 +11,4 @@ public interface EncodableSegment { String encode(); void decode(CharSequence encodedString); - - default void validate() {}; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 374be35a..8a4486a4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public HeaderV1CoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); fields.put(HeaderV1Field.ID, new EncodableFixedInteger(6, HeaderV1.ID)); fields.put(HeaderV1Field.VERSION, new EncodableFixedInteger(6, HeaderV1.VERSION)); fields.put(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange(new ArrayList<>(0))); @@ -44,7 +38,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -56,7 +50,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode HeaderV1CoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index a5772c77..ca999466 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -2,7 +2,6 @@ import java.time.ZonedDateTime; import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -34,16 +33,11 @@ public TcfCaV1CoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { ZonedDateTime date = ZonedDateTime.now(); - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); fields.put(TcfCaV1Field.CREATED, new EncodableDatetime(date)); fields.put(TcfCaV1Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -65,7 +59,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -77,7 +71,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1CoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index cd5abbdb..ce2efbab 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -27,14 +26,9 @@ public TcfCaV1DisclosedVendorsSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange(new ArrayList<>(0))); return fields; @@ -42,7 +36,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +48,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1DisclosedVendorsSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 88a7cdf3..421bd05d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.ArrayList; -import java.util.List; import java.util.function.IntSupplier; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; @@ -29,14 +28,9 @@ public TcfCaV1PublisherPurposesSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); fields.put(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); @@ -63,7 +57,7 @@ public int getAsInt() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -75,7 +69,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1PublisherPurposesSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 5c790f2f..14683b35 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -2,7 +2,6 @@ import java.time.ZonedDateTime; import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -34,16 +33,11 @@ public TcfEuV2CoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { ZonedDateTime date = ZonedDateTime.now(); - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VERSION, new EncodableFixedInteger(6, TcfEuV2.VERSION)); fields.put(TcfEuV2Field.CREATED, new EncodableDatetime(date)); fields.put(TcfEuV2Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -69,7 +63,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -81,7 +75,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2CoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index d0758899..0246d133 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.ArrayList; -import java.util.List; import java.util.function.IntSupplier; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; @@ -29,14 +28,9 @@ public TcfEuV2PublisherPurposesSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfEuV2Field.PUBLISHER_CONSENTS, new EncodableFixedBitfield(24)); fields.put(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); @@ -63,7 +57,7 @@ public int getAsInt() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -75,7 +69,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2PublisherPurposesSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 7ea8afe8..17db2f7c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -27,14 +26,9 @@ public TcfEuV2VendorsAllowedSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, new EncodableFixedInteger(3, 2)); fields.put(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange(new ArrayList<>(0))); return fields; @@ -42,7 +36,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +48,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2VendorsAllowedSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index a608c1c5..2e9b50e3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -27,14 +26,9 @@ public TcfEuV2VendorsDisclosedSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange(new ArrayList<>(0))); return fields; @@ -42,7 +36,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +48,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2VendorsDisclosedSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 67625b1b..e264daea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsCaCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); fields.put(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); fields.put(UsCaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,7 +59,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -77,7 +71,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 148537b7..da5be934 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCaField; @@ -26,23 +26,18 @@ public UsCaGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); fields.put(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsCaField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCaField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCaGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 7dfdb46a..dfc0d9f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsCoCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); fields.put(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); fields.put(UsCoField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -62,7 +56,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -74,7 +68,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCoCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index da77ec53..a4dc03b0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCoField; @@ -26,23 +26,18 @@ public UsCoGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); fields.put(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsCoField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCoField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCoGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index 03b4d5e6..e728fd7e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsCtCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); fields.put(UsCtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -63,7 +57,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -75,7 +69,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCtCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index 88736c05..3ca96233 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCtField; @@ -26,23 +26,18 @@ public UsCtGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); fields.put(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsCtField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCtField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsCtGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 27b31b06..0c8acd3e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -29,14 +28,9 @@ public UsDeCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); fields.put(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); fields.put(UsDeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -67,7 +61,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -79,7 +73,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsDeCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 036eaa23..533fcfe2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsDeField; @@ -26,23 +26,18 @@ public UsDeGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); fields.put(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsDeField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsDeField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsDeGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 0e476b1d..a6d95421 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsFlCoreSegment(CharSequence encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); fields.put(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); fields.put(UsFlField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,7 +59,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -77,7 +71,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsFlCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index e1f857a6..95241928 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -29,14 +28,9 @@ public UsIaCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); fields.put(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); fields.put(UsIaField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -66,7 +60,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -78,7 +72,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsIaCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 81a6d889..cfd0dd36 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsIaField; @@ -26,23 +26,18 @@ public UsIaGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); fields.put(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsIaField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsIaField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsIaGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 5f77c6d2..6508ff96 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsMtCoreSegment(CharSequence encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); fields.put(UsMtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,7 +59,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -77,7 +71,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsMtCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index cbe0c6b3..e3bdbc5b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsMtField; @@ -26,23 +26,18 @@ public UsMtGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); fields.put(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsMtField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsMtField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsMtGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index b4c4fafe..888f32c0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -27,14 +26,9 @@ public UsNatCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); fields.put(UsNatField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -72,7 +66,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -93,7 +87,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField bitString.substring(0, 48) + "00000000" + bitString.substring(48, 52) + "00" + bitString.substring(52, 62); } - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNatCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index c5de9412..ad8df904 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNatField; @@ -26,23 +26,18 @@ public UsNatGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNatField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNatField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNatGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index 27458f1b..cf9b0ca2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -29,14 +28,9 @@ public UsNeCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); fields.put(UsNeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -66,7 +60,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -78,7 +72,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNeCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index dd54550f..c774ddf4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNeField; @@ -26,23 +26,18 @@ public UsNeGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNeField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNeField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNeGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index be82fa67..20409605 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsNhCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); fields.put(UsNhField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,7 +59,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -77,7 +71,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNhCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 87c685e2..64871ee3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNhField; @@ -26,23 +26,18 @@ public UsNhGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNhField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNhField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNhGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 7cf922b8..646d3c38 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsNjCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); fields.put(UsNjField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,7 +59,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -77,7 +71,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNjCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 3acc5ce5..50797791 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNjField; @@ -26,23 +26,18 @@ public UsNjGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNjField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNjField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsNjGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index f1bd0bd9..02360b65 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsOrCoreSegment(CharSequence encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); fields.put(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); fields.put(UsOrField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,7 +59,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -77,7 +71,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsOrCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 1ef5d9ea..9e2853ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsOrField; @@ -26,23 +26,18 @@ public UsOrGpcSegment(CharSequence encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); fields.put(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsOrField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsOrField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsOrGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index 2e7ae67e..fa66f258 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsTnCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); fields.put(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); fields.put(UsTnField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,7 +59,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -77,7 +71,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsTnCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index 4092c989..486f1a1c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTnField; @@ -26,23 +26,18 @@ public UsTnGpcSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); fields.put(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsTnField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTnField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsTnGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 7ba18e87..c414c820 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -29,14 +28,9 @@ public UsTxCoreSegment(CharSequence encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); fields.put(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); fields.put(UsTxField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -66,7 +60,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -78,7 +72,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsTxCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index bb074b11..1e3b8a98 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -8,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTxField; @@ -26,23 +26,18 @@ public UsTxGpcSegment(CharSequence encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); fields.put(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsTxField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); + fields.put(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTxField.GPC, new EncodableBoolean(false)); return fields; } @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -54,7 +49,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsTxGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index e2c97443..ead0215b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsUtCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); fields.put(UsUtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,7 +59,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -77,7 +71,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsUtCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 0d27551b..c4d5f433 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.Arrays; -import java.util.List; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -28,14 +27,9 @@ public UsVaCoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); + EncodableBitStringFields fields = new EncodableBitStringFields(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); fields.put(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); fields.put(UsVaField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -63,7 +57,7 @@ protected EncodableBitStringFields initializeFields() { @Override protected String encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields, getFieldNames()); + BitStringBuilder bitString = bitStringEncoder.encode(fields); String encodedString = base64UrlEncoder.encode(bitString); return encodedString; } @@ -75,7 +69,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); + bitStringEncoder.decode(bitString, fields); } catch (Exception e) { throw new DecodingException("Unable to decode UsVaCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 68f354dd..a103167e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import com.iab.gpp.encoder.datatype.UnencodableCharacter; import com.iab.gpp.encoder.datatype.UnencodableInteger; import com.iab.gpp.encoder.error.DecodingException; @@ -19,14 +18,9 @@ public UspV1CoreSegment(String encodedString) { this.decode(encodedString); } - @Override - public List getFieldNames() { - return UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES; - } - @Override protected GenericFields initializeFields() { - GenericFields fields = new GenericFields(); + GenericFields fields = new GenericFields(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); fields.put(UspV1Field.VERSION, new UnencodableInteger(UspV1.VERSION)); fields.put(UspV1Field.NOTICE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); fields.put(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); From 0702f1bf1aab4e85f5f839cf6f42bfefc35e1ead Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 28 Mar 2025 16:40:46 -0400 Subject: [PATCH 017/146] use StringBuilders to avoid copies --- .../java/com/iab/gpp/encoder/GppModel.java | 9 ++++---- .../base64/AbstractBase64UrlEncoder.java | 4 ++-- .../AbstractLazilyEncodableSection.java | 8 +++++-- .../gpp/encoder/section/EncodableSection.java | 2 ++ .../com/iab/gpp/encoder/section/HeaderV1.java | 8 +++---- .../encoder/section/SlicedCharSequence.java | 22 +++++++++++++++++++ .../com/iab/gpp/encoder/section/TcfCaV1.java | 12 +++++----- .../com/iab/gpp/encoder/section/TcfEuV2.java | 14 ++++++------ .../com/iab/gpp/encoder/section/UsCa.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsCo.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsCt.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsDe.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsFl.java | 8 +++---- .../com/iab/gpp/encoder/section/UsIa.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsMt.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsNat.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsNe.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsNh.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsNj.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsOr.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsTn.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsTx.java | 10 ++++----- .../com/iab/gpp/encoder/section/UsUt.java | 8 +++---- .../com/iab/gpp/encoder/section/UsVa.java | 8 +++---- .../com/iab/gpp/encoder/section/UspV1.java | 8 +++---- .../AbstractLazilyEncodableSegment.java | 6 ++--- .../gpp/encoder/segment/EncodableSegment.java | 2 +- .../encoder/segment/HeaderV1CoreSegment.java | 5 ++--- .../encoder/segment/TcfCaV1CoreSegment.java | 5 ++--- .../TcfCaV1DisclosedVendorsSegment.java | 5 ++--- .../TcfCaV1PublisherPurposesSegment.java | 5 ++--- .../encoder/segment/TcfEuV2CoreSegment.java | 5 ++--- .../TcfEuV2PublisherPurposesSegment.java | 5 ++--- .../segment/TcfEuV2VendorsAllowedSegment.java | 5 ++--- .../TcfEuV2VendorsDisclosedSegment.java | 5 ++--- .../gpp/encoder/segment/UsCaCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsCaGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsCoCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsCoGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsCtCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsCtGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsDeCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsDeGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsFlCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsIaCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsIaGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsMtCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsMtGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsNatCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsNatGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsNeCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsNeGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsNhCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsNhGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsNjCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsNjGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsOrCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsOrGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsTnCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsTnGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsTxCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsTxGpcSegment.java | 5 ++--- .../gpp/encoder/segment/UsUtCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UsVaCoreSegment.java | 5 ++--- .../gpp/encoder/segment/UspV1CoreSegment.java | 4 ++-- .../TraditionalBase64UrlEncoderTest.java | 6 ++--- 66 files changed, 217 insertions(+), 227 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index b5cdfb20..84989716 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -322,13 +322,13 @@ public List getSectionIds() { protected String encodeModel(Map sections) { int length = Sections.SECTION_ORDER.size(); - List encodedSections = new ArrayList<>(length); + List encodedSections = new ArrayList<>(length); List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); EncodableSection section = sections.get(sectionName); if (section != null) { - encodedSections.add(section.encode()); + encodedSections.add(section.encodeCharSequence()); sectionIds.add(section.getId()); } } @@ -339,9 +339,8 @@ protected String encodeModel(Map sections) { } catch (InvalidFieldException e) { throw new EncodingException(e); } - encodedSections.add(0, header.encode()); - - return String.join("~", encodedSections); + encodedSections.add(0, header.encodeCharSequence()); + return SlicedCharSequence.join('~', encodedSections).toString(); } protected Map decodeModel(String str) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index e24123cb..f5490a19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -26,7 +26,7 @@ public abstract class AbstractBase64UrlEncoder { } } - public String encode(BitStringBuilder bitStringBuilder) { + public StringBuilder encode(BitStringBuilder bitStringBuilder) { pad(bitStringBuilder); BitString bitString = bitStringBuilder.build(); int length = bitString.length(); @@ -43,7 +43,7 @@ public String encode(BitStringBuilder bitStringBuilder) { } } - return str.toString(); + return str; } public BitString decode(CharSequence str) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index cc20d838..5d6e354d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -19,7 +19,7 @@ public AbstractLazilyEncodableSection() { protected abstract List initializeSegments(); - protected abstract String encodeSection(List segments); + protected abstract CharSequence encodeSection(List segments); protected abstract List decodeSection(CharSequence encodedString); @@ -74,13 +74,17 @@ public void setFieldValue(String fieldName, Object value) { } public String encode() { + return encodeCharSequence().toString(); + } + + public CharSequence encodeCharSequence() { if (this.encodedString == null || this.encodedString.length() == 0 || this.dirty) { this.encodedString = this.encodeSection(this.segments); this.dirty = false; this.decoded = true; } - return this.encodedString.toString(); + return this.encodedString; } public void decode(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 3f4caad6..9ab83eef 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -15,6 +15,8 @@ public interface EncodableSection { void setFieldValue(String fieldName, Object value); String encode(); + + CharSequence encodeCharSequence(); void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index d7af346f..b62543f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -58,12 +58,12 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); for(EncodableSegment segment : segments) { - encodedSegments.add(segment.encode()); + encodedSegments.add(segment.encodeCharSequence()); } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java index 0842b86d..234bf439 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -5,6 +5,7 @@ public final class SlicedCharSequence implements CharSequence { + private static final String EMPTY = ""; private final CharSequence base; private final int start; private final int end; @@ -29,6 +30,27 @@ public static List split(CharSequence charSequence, char splitter) return out; } + public static final CharSequence join(char glue, List pieces) { + int size = pieces.size(); + if (size > 1) { + int length = size - 1; + for (int i = 0; i < size; i++) { + length += pieces.get(i).length(); + } + StringBuilder sb = new StringBuilder(length); + sb.append(pieces.get(0)); + for (int i = 1; i < size; i++) { + sb.append(glue).append(pieces.get(i)); + } + return sb; + } + if (size == 1) { + return pieces.get(0); + } + return EMPTY; + } + + @Override public int length() { return end - start; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index d6897f80..e5adf8ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -87,16 +87,16 @@ public List decodeSection(CharSequence encodedString) { } @Override - public String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + public CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); - encodedSegments.add(segments.get(0).encode()); - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); + encodedSegments.add(segments.get(1).encodeCharSequence()); if(!this.getDisclosedVendors().isEmpty()) { - encodedSegments.add(segments.get(2).encode()); + encodedSegments.add(segments.get(2).encodeCharSequence()); } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index eab8b631..720230c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -92,28 +92,28 @@ public List decodeSection(CharSequence encodedString) { } @Override - public String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + public CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); Boolean isServiceSpecific = (Boolean) this.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC); if (isServiceSpecific) { if (segments.size() >= 2) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } else { if (segments.size() >= 2) { - encodedSegments.add(segments.get(2).encode()); + encodedSegments.add(segments.get(2).encodeCharSequence()); if (segments.size() >= 3) { - encodedSegments.add(segments.get(3).encode()); + encodedSegments.add(segments.get(3).encodeCharSequence()); } } } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 6d6f4d6d..bcb7c776 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index b24cd823..b5dae649 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index d9ec320d..fa7b4e36 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 1fb83b3f..a29a069e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if (!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if (segments.size() >= 2 && segments.get(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 66b94b44..c1e4f2a0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -58,12 +58,12 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); for (EncodableSegment segment : segments) { - encodedSegments.add(segment.encode()); + encodedSegments.add(segment.encodeCharSequence()); } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 6b047eed..186ba6da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if (!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if (segments.size() >= 2 && segments.get(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 2f01dd77..63da84fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index cdb20508..e3f81d2a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 1a954a19..ce9a7373 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index ac649ed8..4026c2b0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 94da4102..31f86ca7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index e9b5eede..411c6a8c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 2799c54a..1c7d8624 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index da567078..10304747 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -64,17 +64,17 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encode()); + encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encode()); + encodedSegments.add(segments.get(1).encodeCharSequence()); } } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 3db50b9a..960ea9ab 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -58,12 +58,12 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); for(EncodableSegment segment : segments) { - encodedSegments.add(segment.encode()); + encodedSegments.add(segment.encodeCharSequence()); } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 4a7b18b1..71b8d7ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -58,12 +58,12 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); for (EncodableSegment segment : segments) { - encodedSegments.add(segment.encode()); + encodedSegments.add(segment.encodeCharSequence()); } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index d48e4b2d..263e3592 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -58,12 +58,12 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected String encodeSection(List segments) { - List encodedSegments = new ArrayList<>(segments.size()); + protected CharSequence encodeSection(List segments) { + List encodedSegments = new ArrayList<>(segments.size()); for(EncodableSegment segment : segments) { - encodedSegments.add(segment.encode()); + encodedSegments.add(segment.encodeCharSequence()); } - return String.join(".", encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index db955748..02e3f5df 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -32,7 +32,7 @@ public AbstractLazilyEncodableSegment() { protected abstract T initializeFields(); - protected abstract String encodeSegment(T fields); + protected abstract StringBuilder encodeSegment(T fields); protected abstract void decodeSegment(CharSequence encodedString, T Fields); @@ -71,14 +71,14 @@ public void setFieldValue(String fieldName, Object value) { } } - public String encode() { + public CharSequence encodeCharSequence() { if (this.encodedString == null || this.encodedString.length() == 0 || this.dirty) { this.encodedString = encodeSegment(this.fields); this.dirty = false; this.decoded = true; } - return this.encodedString.toString(); + return this.encodedString; } public void decode(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 40c3e5bf..033b14c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -8,7 +8,7 @@ public interface EncodableSegment { void setFieldValue(String fieldName, Object value); - String encode(); + CharSequence encodeCharSequence(); void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 8a4486a4..30eb0099 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -37,10 +37,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index ca999466..e10efb4d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -58,10 +58,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index ce2efbab..94fa60ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -35,10 +35,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 421bd05d..e840cc5a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -56,10 +56,9 @@ public int getAsInt() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 14683b35..668b8ef0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -62,10 +62,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 0246d133..3e3cf369 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -56,10 +56,9 @@ public int getAsInt() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 17db2f7c..7babd723 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -35,10 +35,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 2e9b50e3..3f5ed762 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -35,10 +35,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index e264daea..e2011d4e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -58,10 +58,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index da5be934..452011cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index dfc0d9f6..63086cc5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -55,10 +55,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index a4dc03b0..e1dc7df4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index e728fd7e..a10467c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -56,10 +56,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index 3ca96233..b460e1bb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 0c8acd3e..52276afa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -60,10 +60,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 533fcfe2..5cd5126a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index a6d95421..b2eb2f92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -58,10 +58,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 95241928..f9f4771f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -59,10 +59,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index cfd0dd36..93454f53 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 6508ff96..df14b3f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -58,10 +58,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index e3bdbc5b..7c4d4bdb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 888f32c0..4d454838 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -65,10 +65,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index ad8df904..79090709 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index cf9b0ca2..988997b5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -59,10 +59,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index c774ddf4..41b64300 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 20409605..3f3a3189 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -58,10 +58,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 64871ee3..59a0443c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 646d3c38..a835b00a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -58,10 +58,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 50797791..df30d565 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index 02360b65..552b7229 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -58,10 +58,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 9e2853ed..060bf72e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index fa66f258..3e4bee79 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -58,10 +58,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index 486f1a1c..a469ec57 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index c414c820..37a80da5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -59,10 +59,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index 1e3b8a98..54058df5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -36,10 +36,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index ead0215b..fa080485 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -58,10 +58,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index c4d5f433..dce50cd5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -56,10 +56,9 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected String encodeSegment(EncodableBitStringFields fields) { + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { BitStringBuilder bitString = bitStringEncoder.encode(fields); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; + return base64UrlEncoder.encode(bitString); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index a103167e..e37fa0e2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -29,13 +29,13 @@ protected GenericFields initializeFields() { } @Override - protected String encodeSegment(GenericFields fields) { + protected StringBuilder encodeSegment(GenericFields fields) { StringBuilder str = new StringBuilder(); str.append(fields.get(UspV1Field.VERSION).getValue()); str.append(fields.get(UspV1Field.NOTICE).getValue()); str.append(fields.get(UspV1Field.OPT_OUT_SALE).getValue()); str.append(fields.get(UspV1Field.LSPA_COVERED).getValue()); - return str.toString(); + return str; } @Override diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index 0def62ca..02985a7e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -13,21 +13,21 @@ public class TraditionalBase64UrlEncoderTest { public void testEncode1() { BitStringBuilder builder = new BitStringBuilder(); builder.append(BitString.of("0000110000010000000000010011")); - Assertions.assertEquals("DBABMAAA", base64UrlEncoder.encode(builder)); + Assertions.assertEquals("DBABMAAA", base64UrlEncoder.encode(builder).toString()); } @Test public void testEncode2() { BitStringBuilder builder = new BitStringBuilder(); builder.append(BitString.of("000011000001000000000010001101011")); - Assertions.assertEquals("DBACNYAA", base64UrlEncoder.encode(builder)); + Assertions.assertEquals("DBACNYAA", base64UrlEncoder.encode(builder).toString()); } @Test public void testEncode3() { BitStringBuilder builder = new BitStringBuilder(); builder.append(BitString.of("00001100000100000000000110001111")); - Assertions.assertEquals("DBABjwAA", base64UrlEncoder.encode(builder)); + Assertions.assertEquals("DBABjwAA", base64UrlEncoder.encode(builder).toString()); } @Test From 8cf0bcca0bff0a891f3c8e17f58ee1f23132a352 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 28 Mar 2025 17:14:00 -0400 Subject: [PATCH 018/146] store dirty on DataType --- .../AbstractEncodableBitStringDataType.java | 9 ++ .../iab/gpp/encoder/datatype/DataType.java | 2 + .../datatype/UnencodableCharacter.java | 12 ++ .../encoder/datatype/UnencodableInteger.java | 11 ++ .../com/iab/gpp/encoder/field/Fields.java | 21 ++++ ...actEncodableSegmentedBitStringSection.java | 116 ------------------ .../AbstractLazilyEncodableSegment.java | 12 +- 7 files changed, 60 insertions(+), 123 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index b5d41f26..9b3ca0c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -11,6 +11,7 @@ public abstract class AbstractEncodableBitStringDataType implements EncodableDataType { //this if for backwards compatibility with the newer fields protected boolean hardFailIfMissing = true; + protected boolean dirty = false; protected Predicate validator = null; protected T value; @@ -36,6 +37,7 @@ public void setValue(Object value) { T v = (T) value; if (validator == null || validator.test(v)) { this.value = v; + this.dirty = true; } else { if (v instanceof Collection) { throw new ValidationException("Invalid value '" @@ -57,4 +59,11 @@ public boolean getHardFailIfMissing() { public abstract BitString substring(BitString bitString, int fromIndex) throws SubstringException; + public boolean isDirty() { + return dirty; + } + + public void markClean() { + dirty = false; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 8a0d2c07..7615960c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -4,4 +4,6 @@ public interface DataType { boolean hasValue(); T getValue(); void setValue(Object value); + boolean isDirty(); + void markClean(); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 4ef9c256..da4598de 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -5,6 +5,7 @@ public class UnencodableCharacter implements DataType { + private boolean dirty = false; private Predicate validator; private Character value = null; @@ -41,9 +42,20 @@ public void setValue(Object value) { Character c = (Character)value.toString().charAt(0); if(validator.test(c)) { this.value = c; + this.dirty = true; } else { throw new ValidationException("Invalid value '" + c + "'"); } } + @Override + public boolean isDirty() { + return dirty; + } + + @Override + public void markClean() { + dirty = false; + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index 60dcddfd..34b4f7a5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -5,6 +5,7 @@ public class UnencodableInteger implements DataType { + private boolean dirty; private Predicate validator; private Integer value = null; @@ -41,9 +42,19 @@ public void setValue(Object value) { Integer i = (Integer)value; if(validator.test(i)) { this.value = i; + this.dirty = true; } else { throw new ValidationException("Invalid value '" + i + "'"); } } + @Override + public boolean isDirty() { + return dirty; + } + + @Override + public void markClean() { + dirty = false; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java index db3446bf..431aa3d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java @@ -47,4 +47,25 @@ public void reset(Fields fields) { put(name, fields.get(name)); } } + + public boolean isDirty() { + int size = getNames().size(); + for (int i = 0; i < size; i++) { + T value = get(i); + if (value != null && value.isDirty()) { + return true; + } + } + return false; + } + + public void markClean() { + int size = getNames().size(); + for (int i = 0; i < size; i++) { + T value = get(i); + if (value != null) { + value.markClean(); + } + } + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java deleted file mode 100644 index e5f287d5..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodableSegmentedBitStringSection.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.iab.gpp.encoder.section; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; -import com.iab.gpp.encoder.datatype.SubstringException; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; - -public abstract class AbstractEncodableSegmentedBitStringSection implements EncodableSection { - protected Map> fields; - protected String[][] segments; - - @Override - public boolean hasField(String fieldName) { - return this.fields.containsKey(fieldName); - } - - @Override - public Object getFieldValue(String fieldName) { - AbstractEncodableBitStringDataType field = this.fields.get(fieldName); - if (field != null) { - return field.getValue(); - } else { - return null; - } - } - - @Override - public void setFieldValue(String fieldName, Object value) throws InvalidFieldException { - AbstractEncodableBitStringDataType field = this.fields.get(fieldName); - if (field != null) { - field.setValue(value); - } else { - throw new InvalidFieldException(fieldName + " not found"); - } - } - - public String[][] getSegments() { - return this.segments; - } - - public List encodeSegmentsToBitStrings() throws EncodingException { - int length = this.segments.length; - List segmentBitStrings = new ArrayList<>(length); - for (int i = 0; i < length; i++) { - BitStringBuilder segmentBitString = new BitStringBuilder(); - for (int j = 0; j < this.segments[i].length; j++) { - String fieldName = this.segments[i][j]; - AbstractEncodableBitStringDataType field = this.fields.get(fieldName); - if (field != null) { - try { - field.encode(segmentBitString); - } catch (Exception e) { - throw new EncodingException("Unable to encode " + fieldName, e); - } - } else { - throw new EncodingException("Field not found: '" + fieldName + "'"); - } - } - segmentBitStrings.add(segmentBitString.build().toString()); - } - - return segmentBitStrings; - } - - public void decodeSegmentsFromBitStrings(List segmentBitStrings) throws DecodingException { - for (int i = 0; i < this.segments.length && i < segmentBitStrings.size(); i++) { - decodeSegmentFromBitString(segments[i], segmentBitStrings.get(i)); - } - } - - private void decodeSegmentFromBitString(String[] segment, BitString segmentBitString) throws DecodingException { - if (segmentBitString != null && segmentBitString.length() > 0) { - int index = 0; - for (int j = 0; j < segment.length; j++) { - String fieldName = segment[j]; - AbstractEncodableBitStringDataType field = this.fields.get(fieldName); - if (field != null) { - try { - BitString substring = field.substring(segmentBitString, index); - field.decode(substring); - index += substring.length(); - } catch (SubstringException e) { - if(field.getHardFailIfMissing()) { - throw new DecodingException("Unable to decode " + fieldName, e); - } else { - return; - } - } catch (Exception e) { - throw new DecodingException("Unable to decode " + fieldName, e); - } - } else { - throw new DecodingException("Field not found: '" + fieldName + "'"); - } - } - } - } - - @Override - public abstract String encode() throws EncodingException; - - @Override - public abstract void decode(CharSequence encodedString) throws DecodingException; - - @Override - public abstract int getId(); - - @Override - public abstract String getName(); -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 02e3f5df..85b154fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -23,7 +23,6 @@ public abstract class AbstractLazilyEncodableSegment> implem private CharSequence encodedString = null; - private boolean dirty = false; private boolean decoded = true; public AbstractLazilyEncodableSegment() { @@ -43,7 +42,7 @@ public boolean hasField(String fieldName) { public Object getFieldValue(String fieldName) { if (!this.decoded) { this.decodeSegment(this.encodedString, this.fields); - this.dirty = false; + this.fields.markClean(); this.decoded = true; } @@ -58,23 +57,22 @@ public Object getFieldValue(String fieldName) { public void setFieldValue(String fieldName, Object value) { if (!this.decoded) { this.decodeSegment(this.encodedString, this.fields); - this.dirty = false; + this.fields.markClean(); this.decoded = true; } DataType field = this.fields.get(fieldName); if (field != null) { field.setValue(value); - this.dirty = true; } else { throw new InvalidFieldException(fieldName + " not found"); } } public CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.dirty) { + if (this.encodedString == null || this.encodedString.length() == 0 || this.fields.isDirty()) { this.encodedString = encodeSegment(this.fields); - this.dirty = false; + this.fields.markClean(); this.decoded = true; } @@ -83,7 +81,7 @@ public CharSequence encodeCharSequence() { public void decode(CharSequence encodedString) { this.encodedString = encodedString; - this.dirty = false; + this.fields.markClean(); this.decoded = false; } From bcee62810074fa6262fcd1e0d457b460dcfb4cf3 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Sat, 29 Mar 2025 18:09:11 -0400 Subject: [PATCH 019/146] detect external modification of values --- .../java/com/iab/gpp/encoder/GppModel.java | 12 +- .../iab/gpp/encoder/bitstring/BitString.java | 37 ++--- .../AbstractEncodableBitStringDataType.java | 4 +- .../iab/gpp/encoder/datatype/DataType.java | 2 +- .../EncodableArrayOfFixedIntegerRanges.java | 24 +--- .../encoder/datatype/EncodableBoolean.java | 9 -- .../encoder/datatype/EncodableDatetime.java | 5 - .../EncodableFibonacciIntegerRange.java | 30 ++-- .../datatype/EncodableFixedBitfield.java | 36 ++--- .../datatype/EncodableFixedInteger.java | 6 - .../datatype/EncodableFixedIntegerList.java | 11 +- .../datatype/EncodableFixedIntegerRange.java | 30 ++-- .../datatype/EncodableFixedString.java | 6 - .../datatype/EncodableFlexibleBitfield.java | 37 ++--- .../EncodableOptimizedFibonacciRange.java | 16 +-- .../EncodableOptimizedFixedRange.java | 30 ++-- .../iab/gpp/encoder/datatype/RangeEntry.java | 14 +- .../datatype/UnencodableCharacter.java | 4 +- .../encoder/datatype/UnencodableInteger.java | 4 +- .../encoder/ArrayOfRangesEntryEncoder.java | 39 ------ .../datatype/encoder/BitStringSet.java | 128 ++++++++++++++++++ .../encoder/FibonacciIntegerRangeEncoder.java | 19 ++- .../encoder/FixedBitfieldEncoder.java | 20 +-- .../encoder/FixedIntegerRangeEncoder.java | 19 ++- .../encoder/datatype/encoder/IntegerList.java | 84 ------------ .../encoder/datatype/encoder/IntegerSet.java | 64 +++++++++ .../encoder/datatype/encoder/ManagedList.java | 35 +++++ .../encoder/datatype/encoder/ManagedSet.java | 60 ++++++++ .../OptimizedFibonacciRangeEncoder.java | 20 +-- .../encoder/OptimizedFixedRangeEncoder.java | 20 +-- .../com/iab/gpp/encoder/field/Fields.java | 2 +- .../com/iab/gpp/encoder/section/HeaderV1.java | 6 +- .../com/iab/gpp/encoder/section/TcfCaV1.java | 51 +++---- .../com/iab/gpp/encoder/section/TcfEuV2.java | 56 ++++---- .../encoder/segment/HeaderV1CoreSegment.java | 2 +- .../encoder/segment/TcfCaV1CoreSegment.java | 6 +- .../TcfCaV1DisclosedVendorsSegment.java | 2 +- .../TcfCaV1PublisherPurposesSegment.java | 4 +- .../encoder/segment/TcfEuV2CoreSegment.java | 6 +- .../TcfEuV2PublisherPurposesSegment.java | 4 +- .../segment/TcfEuV2VendorsAllowedSegment.java | 2 +- .../TcfEuV2VendorsDisclosedSegment.java | 2 +- .../com/iab/gpp/encoder/GppModelTest.java | 36 +++-- .../EncodableFibonacciIntegerTest.java | 16 --- .../EncodableFixedIntegerRangeTest.java | 5 +- .../EncodableOptimizedFixedRangeTest.java | 9 +- .../FibonacciIntegerRangeEncoderTest.java | 19 +-- .../encoder/FixedBitfieldEncoderTest.java | 54 +++++--- .../encoder/FixedIntegerRangeEncoderTest.java | 23 ++-- .../iab/gpp/encoder/section/HeaderV1Test.java | 7 +- .../iab/gpp/encoder/section/TcfCaV1Test.java | 20 +-- .../iab/gpp/encoder/section/TcfEuV2Test.java | 41 +++--- 52 files changed, 605 insertions(+), 593 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ArrayOfRangesEntryEncoder.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerList.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerTest.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 84989716..fc10cb48 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -5,6 +5,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.PrimitiveIterator; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; @@ -351,11 +353,11 @@ protected Map decodeModel(String str) { HeaderV1 header = new HeaderV1(encodedSections.get(0)); sections.put(HeaderV1.NAME, header); - @SuppressWarnings("unchecked") - List sectionIds = (List) header.getFieldValue("SectionIds"); - for (int i = 0; i < sectionIds.size(); i++) { - CharSequence section = encodedSections.get(i + 1); - switch (sectionIds.get(i)) { + PrimitiveIterator.OfInt it = header.getSectionsIds().iterator(); + int i = 1; + while (it.hasNext()) { + CharSequence section = encodedSections.get(i++); + switch (it.nextInt()) { case TcfEuV2.ID: sections.put(TcfEuV2.NAME, new TcfEuV2(section)); break; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 5b1ef6ae..74390459 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,11 +1,11 @@ package com.iab.gpp.encoder.bitstring; -import java.util.AbstractList; import java.util.BitSet; - +import com.iab.gpp.encoder.datatype.encoder.BitStringSet; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; -public final class BitString extends AbstractList { +public final class BitString { public static final char TRUE = '1'; public static final char FALSE = '0'; public static final String TRUE_STRING = new String(new char[] {TRUE}); @@ -44,7 +44,12 @@ public static final BitString of(String str) { } return builder.build(); } + + public IntegerSet toIntegerSet() { + return new BitStringSet(bitSet, from, to); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(length()); for (int i = from; i < to; i++) { @@ -53,36 +58,14 @@ public String toString() { return sb.toString(); } - /** - * This is the fast getter without boxing - * @param i index - * @return the value at that index - */ public boolean getValue(int i) { return bitSet.get(from + i); } - @Override - public Boolean get(int i) { - return getValue(i); - } - - @Override - public Boolean set(int index, Boolean element) { - Boolean old = get(index); - bitSet.set(from + index, element); - return old; - } - public int length() { return to - from; } - @Override - public int size() { - return length(); - } - public BitString substring(int i) { return substring(i, length()); } @@ -96,10 +79,6 @@ public BitString substring(int newFrom, int newTo) { return new BitString(bitSet, oldFrom + newFrom, oldFrom + newTo); } - public boolean isEmpty() { - return length() == 0; - } - public BitString expandTo(int target) { int needed = target - length(); if (needed == 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 9b3ca0c5..e899ffe9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -63,7 +63,7 @@ public boolean isDirty() { return dirty; } - public void markClean() { - dirty = false; + public void setDirty(boolean dirty) { + this.dirty = dirty; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 7615960c..58d70730 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -5,5 +5,5 @@ public interface DataType { T getValue(); void setValue(Object value); boolean isDirty(); - void markClean(); + void setDirty(boolean dirty); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 23e319d4..85bfb4b7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,12 +1,14 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -14,25 +16,12 @@ public class EncodableArrayOfFixedIntegerRanges extends AbstractEncodableBitStri private int keyBitStringLength; private int typeBitStringLength; - - protected EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength) { - super(true); - this.keyBitStringLength = keyBitStringLength; - this.typeBitStringLength = typeBitStringLength; - } - - public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, List value) { - super(true); - this.keyBitStringLength = keyBitStringLength; - this.typeBitStringLength = typeBitStringLength; - setValue(value); - } - public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, List value, boolean hardFailIfMissing) { + public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { super(hardFailIfMissing); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; - setValue(value); + this.value = Collections.emptyList(); } @Override @@ -66,13 +55,14 @@ public void decode(BitString bitString) { index += typeBitStringLength; BitString substring = new EncodableFixedIntegerRange().substring(bitString, index); - List ids = FixedIntegerRangeEncoder.decode(substring); + IntegerSet ids = FixedIntegerRangeEncoder.decode(substring); index += substring.length(); entries.add(new RangeEntry(key, type, ids)); } - this.value = entries; + // NOTE: this requires that updates to structure be done using the setter + this.value = Collections.unmodifiableList(entries); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 39e7c977..1d4a83a8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -8,20 +8,11 @@ public class EncodableBoolean extends AbstractEncodableBitStringDataType { - protected EncodableBoolean() { - super(true); - } - public EncodableBoolean(Boolean value) { super(true); setValue(value); } - public EncodableBoolean(Boolean value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - setValue(value); - } - public void encode(BitStringBuilder builder){ try { BooleanEncoder.encode(builder, this.value); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 7a440a97..3724400a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -19,11 +19,6 @@ public EncodableDatetime(ZonedDateTime value) { setValue(value); } - public EncodableDatetime(ZonedDateTime value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - setValue(value); - } - public void encode(BitStringBuilder builder) { try { DatetimeEncoder.encode(builder, this.value); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index ec1f1115..cc3543f4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -1,32 +1,23 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; -import java.util.Collections; +import java.util.Collection; import java.util.List; -import java.util.TreeSet; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFibonacciIntegerRange extends AbstractEncodableBitStringDataType> { - - protected EncodableFibonacciIntegerRange() { - super(true); - } +public class EncodableFibonacciIntegerRange extends AbstractEncodableBitStringDataType { - public EncodableFibonacciIntegerRange(List value) { + public EncodableFibonacciIntegerRange() { super(true); - setValue(value); - } - - public EncodableFibonacciIntegerRange(List value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - setValue(value); + this.value = new BitStringSet(); } public void encode(BitStringBuilder builder) { @@ -65,11 +56,12 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - super.setValue(new ArrayList<>(new TreeSet<>((List) value))); + this.value.clear(); + this.value.addAll((Collection) value); } @Override - public List getValue() { - return Collections.unmodifiableList(super.getValue()); + public IntegerSet getValue() { + return new ManagedSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index cbbf9c9a..e6d131d4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -1,34 +1,26 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; -import java.util.Collections; +import java.util.Collection; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFixedBitfield extends AbstractEncodableBitStringDataType> { +public class EncodableFixedBitfield extends AbstractEncodableBitStringDataType { - private int numElements; + private final int numElements; public EncodableFixedBitfield(int numElements) { super(true); this.numElements = numElements; - this.value = BitString.empty(numElements); - } - - protected EncodableFixedBitfield(int numElements, boolean hardFailIfMissing) { - super(hardFailIfMissing); - this.numElements = numElements; - } - - public EncodableFixedBitfield(List value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - this.numElements = value.size(); - setValue(value); + this.value = BitStringSet.withLimit(numElements); } public void encode(BitStringBuilder builder) { @@ -58,18 +50,12 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - List v = new ArrayList<>((List) value); - for (int i = v.size(); i < numElements; i++) { - v.add(false); - } - if (v.size() > numElements) { - v = v.subList(0, numElements); - } - super.setValue(v); + this.value.clear(); + this.value.addAll((Collection) value); } @Override - public List getValue() { - return Collections.unmodifiableList(super.getValue()); + public IntegerSet getValue() { + return new ManagedSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 5159d272..b7bb452d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -21,12 +21,6 @@ public EncodableFixedInteger(int bitStringLength, Integer value) { setValue(value); } - public EncodableFixedInteger(int bitStringLength, Integer value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - this.bitStringLength = bitStringLength; - setValue(value); - } - public void encode(BitStringBuilder builder) { try { FixedIntegerEncoder.encode(builder, this.value, this.bitStringLength); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 511a7458..3ffd03e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,12 +1,12 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; +import com.iab.gpp.encoder.datatype.encoder.ManagedList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,13 +28,6 @@ public EncodableFixedIntegerList(int elementBitStringLength, List value setValue(value); } - public EncodableFixedIntegerList(int elementBitStringLength, List value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - this.elementBitStringLength = elementBitStringLength; - this.numElements = value.size(); - setValue(value); - } - public void encode(BitStringBuilder builder) { try { FixedIntegerListEncoder.encode(builder, this.value, this.elementBitStringLength, this.numElements); @@ -74,6 +67,6 @@ public void setValue(Object value) { @Override public List getValue() { - return Collections.unmodifiableList(super.getValue()); + return new ManagedList<>(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index c73a576e..63a6352d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -1,31 +1,22 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; -import java.util.Collections; +import java.util.Collection; import java.util.List; -import java.util.TreeSet; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFixedIntegerRange extends AbstractEncodableBitStringDataType> { +public class EncodableFixedIntegerRange extends AbstractEncodableBitStringDataType { protected EncodableFixedIntegerRange() { super(true); - } - - public EncodableFixedIntegerRange(List value) { - super(true); - setValue(value); - } - - public EncodableFixedIntegerRange(List value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - setValue(value); + this.value = new BitStringSet(); } public void encode(BitStringBuilder builder) { @@ -64,11 +55,12 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - super.setValue(new ArrayList<>(new TreeSet<>((List) value))); + this.value.clear(); + this.value.addAll((Collection) value); } - + @Override - public List getValue() { - return Collections.unmodifiableList(super.getValue()); + public IntegerSet getValue() { + return new ManagedSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 200b6ded..f06b98f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -21,12 +21,6 @@ public EncodableFixedString(int stringLength, String value) { setValue(value); } - public EncodableFixedString(int stringLength, String value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - this.stringLength = stringLength; - setValue(value); - } - public void encode(BitStringBuilder builder) { try { FixedStringEncoder.encode(builder, this.value, this.stringLength); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 43c4e67a..1b344a25 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -1,35 +1,27 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; -import java.util.Collections; +import java.util.Collection; import java.util.List; import java.util.function.IntSupplier; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFlexibleBitfield extends AbstractEncodableBitStringDataType> { +public class EncodableFlexibleBitfield extends AbstractEncodableBitStringDataType { private IntSupplier getLengthSupplier; - protected EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { + public EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { super(true); this.getLengthSupplier = getLengthSupplier; - } - - public EncodableFlexibleBitfield(IntSupplier getLengthSupplier, List value) { - super(true); - this.getLengthSupplier = getLengthSupplier; - this.setValue(value); - } - - public EncodableFlexibleBitfield(IntSupplier getLengthSupplier, List value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - this.getLengthSupplier = getLengthSupplier; - this.setValue(value); + this.value = new BitStringSet(); } public void encode(BitStringBuilder builder) { @@ -59,19 +51,12 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - int numElements = this.getLengthSupplier.getAsInt(); - List v = new ArrayList<>((List) value); - for (int i = v.size(); i < numElements; i++) { - v.add(false); - } - if (v.size() > numElements) { - v = v.subList(0, numElements); - } - super.setValue(v); + this.value.clear(); + this.value.addAll((Collection) value); } @Override - public List getValue() { - return Collections.unmodifiableList(super.getValue()); + public IntegerSet getValue() { + return new ManagedSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java index 85c58b69..4f5dc798 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java @@ -1,18 +1,17 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; -import java.util.Collections; +import java.util.Collection; import java.util.List; -import java.util.TreeSet; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFibonacciRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableOptimizedFibonacciRange extends AbstractEncodableBitStringDataType> { +public class EncodableOptimizedFibonacciRange extends AbstractEncodableBitStringDataType { protected EncodableOptimizedFibonacciRange() { super(true); @@ -63,11 +62,12 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - super.setValue(new ArrayList<>(new TreeSet<>((List) value))); + this.value.clear(); + this.value.addAll((Collection) value); } @Override - public List getValue() { - return Collections.unmodifiableList(super.getValue()); + public IntegerSet getValue() { + return new ManagedSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 8efddc66..adbd0a10 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -1,32 +1,23 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; -import java.util.Collections; +import java.util.Collection; import java.util.List; -import java.util.TreeSet; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableOptimizedFixedRange extends AbstractEncodableBitStringDataType> { - - protected EncodableOptimizedFixedRange() { - super(true); - } +public class EncodableOptimizedFixedRange extends AbstractEncodableBitStringDataType { - public EncodableOptimizedFixedRange(List value) { + public EncodableOptimizedFixedRange() { super(true); - setValue(value); - } - - public EncodableOptimizedFixedRange(List value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - setValue(value); + this.value = new BitStringSet(); } public void encode(BitStringBuilder builder) { @@ -64,11 +55,12 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - super.setValue(new ArrayList<>(new TreeSet<>((List) value))); + this.value.clear(); + this.value.addAll((Collection) value); } @Override - public List getValue() { - return Collections.unmodifiableList(super.getValue()); + public IntegerSet getValue() { + return new ManagedSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 0237ed18..46780981 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -1,14 +1,15 @@ package com.iab.gpp.encoder.datatype; -import java.util.List; +import java.util.Collection; +import java.util.Set; public class RangeEntry { private int key; private int type; - private List ids; + private Set ids; - public RangeEntry(int key, int type, List ids) { + public RangeEntry(int key, int type, Set ids) { super(); this.key = key; this.type = type; @@ -31,12 +32,13 @@ public void setType(int type) { this.type = type; } - public List getIds() { + public Set getIds() { return ids; } - public void setIds(List ids) { - this.ids = ids; + public void setIds(Collection ids) { + this.ids.clear(); + this.ids.addAll(ids); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index da4598de..27c5c941 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -54,8 +54,8 @@ public boolean isDirty() { } @Override - public void markClean() { - dirty = false; + public void setDirty(boolean dirty) { + this.dirty = dirty; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index 34b4f7a5..8838e4c4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -54,7 +54,7 @@ public boolean isDirty() { } @Override - public void markClean() { - dirty = false; + public void setDirty(boolean dirty) { + this.dirty = dirty; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ArrayOfRangesEntryEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ArrayOfRangesEntryEncoder.java deleted file mode 100644 index cc7a19b1..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ArrayOfRangesEntryEncoder.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; - -public class ArrayOfRangesEntryEncoder { - - - public static String encode(long value, int bitStringLength) { - String bitString = ""; - while (value > 0) { - if ((value & 1) == 1) { - bitString = BitString.TRUE_STRING + bitString; - } else { - bitString = BitString.FALSE_STRING + bitString; - } - value = value >> 1; - } - - while (bitString.length() < bitStringLength) { - bitString = BitString.FALSE_STRING + bitString; - } - - return bitString; - } - - public static long decode(BitString bitString) throws DecodingException { - long value = 0; - - int length = bitString.length(); - for (int i = 0; i < length; i++) { - if (bitString.getValue(length - (i + 1))) { - value += 1L << i; - } - } - - return value; - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java new file mode 100644 index 00000000..d5353ad6 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java @@ -0,0 +1,128 @@ +package com.iab.gpp.encoder.datatype.encoder; + +import java.util.BitSet; +import java.util.NoSuchElementException; +import java.util.PrimitiveIterator.OfInt; + +public final class BitStringSet extends IntegerSet { + static final int MAX_COLLECTION_SIZE = 16384; + + protected final BitSet bitSet; + protected final int from; + protected final int to; + + public BitStringSet(BitSet bitSet, int from, int to) { + this.bitSet = bitSet; + this.from = from; + this.to = to; + } + + public static final BitStringSet withLimit(int limit) { + return new BitStringSet(new BitSet(0), 0, limit); + } + + public BitStringSet(int size) { + this(new BitSet(size), 0, MAX_COLLECTION_SIZE); + } + + public BitStringSet() { + this(0); + } + + public static final BitStringSet of(int... values) { + BitStringSet out = new BitStringSet(); + for (int value : values) { + out.addInt(value); + } + return out; + } + + @Override + public int size() { + OfInt it = iterator(); + int count = 0; + while (it.hasNext()) { + it.next(); + count++; + } + return count; + } + + @Override + public void clear() { + bitSet.clear(from, to); + } + + @Override + public boolean isEmpty() { + return bitSet.nextSetBit(from) != -1; + } + + @Override + public boolean containsInt(int value) { + int offset = from + value; + return offset < to && bitSet.get(offset); + } + + @Override + public OfInt iterator() { + return new OfInt() { + int cursor = bitSet.nextSetBit(from); + + @Override + public boolean hasNext() { + return cursor < to && cursor != -1; + } + + @Override + public Integer next() { + return IntegerCache.valueOf(nextInt()); + } + + @Override + public int nextInt() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + int next = cursor; + cursor = bitSet.nextSetBit(cursor + 1); + return next - from; + } + }; + } + + public void addRange(int start, int end) { + int realStart = from + start; + int realEnd = from + end; + if (realStart >= to || realEnd > to) { + throw new IndexOutOfBoundsException(); + } + bitSet.set(realStart, realEnd); + } + + public boolean addInt(int value) { + int offset = from + value; + if (offset >= to) { + throw new IndexOutOfBoundsException(); + } + boolean present = bitSet.get(offset); + if (present) { + return false; + } + bitSet.set(offset, true); + return true; + } + + public boolean removeInt(int value) { + int offset = from + value; + if (offset >= to) { + throw new IndexOutOfBoundsException(); + } + boolean present = bitSet.get(offset); + if (!present) { + return false; + } + bitSet.set(offset, false); + return true; + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index db29296f..12696371 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -1,17 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; - +import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { - public static void encode(BitStringBuilder builder, List value) { - Collections.sort(value); + public static int encode(BitStringBuilder builder, Collection value) { BitStringBuilder rangeBuilder = new BitStringBuilder(); int groupStart = -1; int last = Integer.MIN_VALUE; @@ -34,6 +30,7 @@ public static void encode(BitStringBuilder builder, List value) { } FixedIntegerEncoder.encode(builder,groupCount, 12); builder.append(rangeBuilder); + return last; } private static void writeGroup(BitStringBuilder builder, int groupStart, int last, int offset) { @@ -49,13 +46,13 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static List decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - BitSet value = new BitSet(); + BitStringSet value = new BitStringSet(); int offset = 0; int startIndex = 12; @@ -73,16 +70,16 @@ public static List decode(BitString bitString) throws DecodingException int end = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = end; startIndex = index + 2; - value.set(start, end + 1); + value.addRange(start, end + 1); } else { int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); int val = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = val; - value.set(val); + value.addInt(val); startIndex = index + 2; } } - return new IntegerList(value); + return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 74ae4cf0..4086b0b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -1,29 +1,17 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.List; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.error.EncodingException; public class FixedBitfieldEncoder { - public static void encode(BitStringBuilder builder, List value, int bitStringLength) { - int length = value.size(); - if (length > bitStringLength) { - throw new EncodingException("Too many values '" + length + "'"); - } - + public static void encode(BitStringBuilder builder, IntegerSet value, int bitStringLength) { for (int i = 0; i < bitStringLength; i++) { - if (i < length) { - BooleanEncoder.encode(builder, value.get(i)); - } else { - builder.append(false); - } + BooleanEncoder.encode(builder, value.containsInt(i)); } } - public static List decode(BitString bitString) { - return bitString; + public static IntegerSet decode(BitString bitString) { + return bitString.toIntegerSet(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index e6c2a57c..add371e4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -1,17 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.BitSet; -import java.util.Collections; -import java.util.List; - +import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { - public static void encode(BitStringBuilder builder, List value) { - Collections.sort(value); + public static int encode(BitStringBuilder builder, Collection value) { BitStringBuilder rangeBuilder = new BitStringBuilder(); int groupStart = -1; int last = Integer.MIN_VALUE; @@ -32,6 +28,7 @@ public static void encode(BitStringBuilder builder, List value) { } FixedIntegerEncoder.encode(builder,groupCount, 12); builder.append(rangeBuilder); + return last; } private static void writeGroup(BitStringBuilder builder, int groupStart, int last) { @@ -45,13 +42,13 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static List decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - BitSet value = new BitSet(); + BitStringSet value = new BitStringSet(); int startIndex = 12; for (int i = 0; i < count; i++) { boolean group = BooleanEncoder.decode(bitString, startIndex, 1); @@ -64,14 +61,14 @@ public static List decode(BitString bitString) throws DecodingException int end = FixedIntegerEncoder.decode(bitString, startIndex, 16); startIndex += 16; - value.set(start, end + 1); + value.addRange(start, end + 1); } else { int val = FixedIntegerEncoder.decode(bitString, startIndex, 16); - value.set(val); + value.addInt(val); startIndex += 16; } } - return new IntegerList(value); + return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerList.java deleted file mode 100644 index a2ac8e36..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerList.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import java.util.AbstractList; -import java.util.BitSet; -import java.util.Comparator; -import java.util.NoSuchElementException; -import java.util.PrimitiveIterator.OfInt; - -final class IntegerList extends AbstractList { - - private static final int UNKNOWN = -1; - - private final BitSet bitSet; - // Lazily initiate - private int size; - private int[] array; - - IntegerList(BitSet bitSet) { - this.size = UNKNOWN; - this.bitSet = bitSet; - } - - @Override - public int size() { - int theSize = this.size; - if (theSize == UNKNOWN) { - theSize = bitSet.isEmpty() ? 0 : bitSet.cardinality(); - this.size = theSize; - } - return size; - } - - @Override - public boolean contains(Object o) { - return o instanceof Integer && bitSet.get((Integer) o); - } - - @Override - public void sort(Comparator c) { - // This is already sorted - } - - @Override - public OfInt iterator(){ - return new OfInt() { - int cursor = bitSet.nextSetBit(0); - - @Override - public boolean hasNext() { - return cursor != -1; - } - - @Override - public Integer next() { - return IntegerCache.valueOf(nextInt()); - } - - @Override - public int nextInt() { - if (!this.hasNext()) { - throw new NoSuchElementException(); - } - int next = cursor; - cursor = bitSet.nextSetBit(cursor + 1); - return next; - } - }; - } - - @Override - public Integer get(int index) { - int[] theArray = this.array; - if (theArray == null) { - // Lazily construct a backing array - theArray = new int[size()]; - int count = 0; - for (OfInt it = iterator(); it.hasNext();) { - theArray[count++] = it.nextInt(); - } - array = theArray; - } - return IntegerCache.valueOf(theArray[index]); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java new file mode 100644 index 00000000..1411e972 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -0,0 +1,64 @@ +package com.iab.gpp.encoder.datatype.encoder; + +import java.util.AbstractSet; +import java.util.Collection; +import java.util.PrimitiveIterator; + +public abstract class IntegerSet extends AbstractSet { + public abstract boolean containsInt(int value); + + @Override + public final boolean contains(Object value) { + if (value instanceof Integer) { + return containsInt((Integer) value); + } + return false; + } + + @Override + public final boolean add(Integer value) { + if (value == null) { + return false; + } + return addInt((Integer) value); + } + + public abstract boolean addInt(int value); + + @Override + public final boolean remove(Object value) { + if (value instanceof Integer) { + return removeInt((Integer) value); + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } + + @Override + public boolean retainAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (!c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } + + public abstract boolean removeInt(int value); + + @Override + public abstract PrimitiveIterator.OfInt iterator(); +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java new file mode 100644 index 00000000..e9730a04 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java @@ -0,0 +1,35 @@ +package com.iab.gpp.encoder.datatype.encoder; + +import java.util.AbstractList; +import java.util.List; +import com.iab.gpp.encoder.datatype.DataType; + +public final class ManagedList extends AbstractList { + + private final DataType parent; + private final List delegate; + + public ManagedList(DataType parent, List delegate) { + this.parent = parent; + this.delegate = delegate; + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public T get(int index) { + return delegate.get(index); + } + + @Override + public T set(int index, T value) { + T prior = delegate.set(index, value); + if (prior != null) { + parent.setDirty(true); + } + return prior; + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java new file mode 100644 index 00000000..fea40f78 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java @@ -0,0 +1,60 @@ +package com.iab.gpp.encoder.datatype.encoder; + +import java.util.PrimitiveIterator; +import com.iab.gpp.encoder.datatype.DataType; + +public final class ManagedSet extends IntegerSet { + + private final DataType parent; + private final IntegerSet delegate; + + public ManagedSet(DataType parent, IntegerSet delegate) { + this.parent = parent; + this.delegate = delegate; + } + + @Override + public void clear() { + delegate.clear(); + parent.setDirty(true); + } + + @Override + public boolean isEmpty() { + return delegate.isEmpty(); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public PrimitiveIterator.OfInt iterator() { + return delegate.iterator(); + } + + @Override + public boolean containsInt(int value) { + return delegate.containsInt(value); + } + + @Override + public boolean addInt(int value) { + boolean modified = delegate.addInt(value); + if (modified) { + parent.setDirty(true); + } + return modified; + } + + @Override + public boolean removeInt(int value) { + boolean modified = delegate.removeInt(value); + if (modified) { + parent.setDirty(true); + } + return modified; + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index e347650a..273a45d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.BitSet; -import java.util.List; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; @@ -10,12 +7,11 @@ public class OptimizedFibonacciRangeEncoder { - public static void encode(BitStringBuilder builder, List value) throws EncodingException { + public static void encode(BitStringBuilder builder, IntegerSet value) throws EncodingException { // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way // to identify in advance which will be shorter based on the array length and values - int max = value.size() > 0 ? value.get(value.size() - 1) : 0; BitStringBuilder rangeBitString = new BitStringBuilder(); - FibonacciIntegerRangeEncoder.encode(rangeBitString, value); + int max = FibonacciIntegerRangeEncoder.encode(rangeBitString, value); int rangeLength = rangeBitString.length(); int bitFieldLength = max; @@ -25,11 +21,9 @@ public static void encode(BitStringBuilder builder, List value) throws } else { FixedIntegerEncoder.encode(builder, max, 16); builder.append(false); - int index = 0; for (int i = 0; i < max; i++) { - if (i == value.get(index) - 1) { + if (value.contains(i + 1)) { builder.append(true); - index++; } else { builder.append(false); } @@ -37,7 +31,7 @@ public static void encode(BitStringBuilder builder, List value) throws } } - public static List decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } @@ -47,13 +41,13 @@ public static List decode(BitString bitString) throws DecodingException } else { BitString bits = bitString.substring(17); int length = bits.length(); - BitSet value = new BitSet(length + 1); + BitStringSet value = new BitStringSet(length + 1); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { - value.set(i + 1); + value.addInt(i + 1); } } - return new IntegerList(value); + return value; } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 00f02231..406ed3e1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.BitSet; -import java.util.List; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; @@ -10,12 +7,11 @@ public class OptimizedFixedRangeEncoder { - public static void encode(BitStringBuilder builder, List value) throws EncodingException { + public static void encode(BitStringBuilder builder, IntegerSet value) throws EncodingException { // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way // to identify in advance which will be shorter based on the array length and values - int max = value.size() > 0 ? value.get(value.size() - 1) : 0; BitStringBuilder rangeBitString = new BitStringBuilder(); - FixedIntegerRangeEncoder.encode(rangeBitString,value); + int max = FixedIntegerRangeEncoder.encode(rangeBitString, value); int rangeLength = rangeBitString.length(); int bitFieldLength = max; @@ -25,11 +21,9 @@ public static void encode(BitStringBuilder builder, List value) throws } else { FixedIntegerEncoder.encode(builder, max, 16); builder.append(false); - int index = 0; for (int i = 0; i < max; i++) { - if (i == value.get(index) - 1) { + if (value.containsInt(i + 1)) { builder.append(true); - index++; } else { builder.append(false); } @@ -37,7 +31,7 @@ public static void encode(BitStringBuilder builder, List value) throws } } - public static List decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } @@ -47,13 +41,13 @@ public static List decode(BitString bitString) throws DecodingException } else { BitString bits = bitString.substring(17); int length = bits.length(); - BitSet value = new BitSet(length + 1); + BitStringSet value = new BitStringSet(length + 1); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { - value.set(i + 1); + value.addInt(i + 1); } } - return new IntegerList(value); + return value; } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java index 431aa3d1..35e830a9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java @@ -64,7 +64,7 @@ public void markClean() { for (int i = 0; i < size; i++) { T value = get(i); if (value != null) { - value.markClean(); + value.setDirty(false); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index b62543f5..3e04eff0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; @@ -67,9 +68,8 @@ protected CharSequence encodeSection(List segments) { } - @SuppressWarnings("unchecked") - public List getSectionsIds() { - return (List) this.getFieldValue(HeaderV1Field.SECTION_IDS); + public IntegerSet getSectionsIds() { + return (IntegerSet) this.getFieldValue(HeaderV1Field.SECTION_IDS); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index e5adf8ec..9cb9c295 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -6,6 +6,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.TcfCaV1Field; @@ -148,29 +149,24 @@ public Boolean getUseNonStandardStacks() { return (Boolean) this.getFieldValue(TcfCaV1Field.USE_NON_STANDARD_STACKS); } - @SuppressWarnings("unchecked") - public List getSpecialFeatureExpressConsent() { - return (List) this.getFieldValue(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT); + public IntegerSet getSpecialFeatureExpressConsent() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT); } - @SuppressWarnings("unchecked") - public List getPurposesExpressConsent() { - return (List) this.getFieldValue(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT); + public IntegerSet getPurposesExpressConsent() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT); } - @SuppressWarnings("unchecked") - public List getPurposesImpliedConsent() { - return (List) this.getFieldValue(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT); + public IntegerSet getPurposesImpliedConsent() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT); } - @SuppressWarnings("unchecked") - public List getVendorExpressConsent() { - return (List) this.getFieldValue(TcfCaV1Field.VENDOR_EXPRESS_CONSENT); + public IntegerSet getVendorExpressConsent() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.VENDOR_EXPRESS_CONSENT); } - @SuppressWarnings("unchecked") - public List getVendorImpliedConsent() { - return (List) this.getFieldValue(TcfCaV1Field.VENDOR_IMPLIED_CONSENT); + public IntegerSet getVendorImpliedConsent() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.VENDOR_IMPLIED_CONSENT); } @SuppressWarnings("unchecked") @@ -182,37 +178,32 @@ public Integer getPubPurposesSegmentType() { return (Integer) this.getFieldValue(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE); } - @SuppressWarnings("unchecked") - public List getPubPurposesExpressConsent() { - return (List) this.getFieldValue(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT); + public IntegerSet getPubPurposesExpressConsent() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT); } - @SuppressWarnings("unchecked") - public List getPubPurposesImpliedConsent() { - return (List) this.getFieldValue(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT); + public IntegerSet getPubPurposesImpliedConsent() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT); } public Integer getNumCustomPurposes() { return (Integer) this.getFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES); } - @SuppressWarnings("unchecked") - public List getCustomPurposesExpressConsent() { - return (List) this.getFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT); + public IntegerSet getCustomPurposesExpressConsent() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT); } - @SuppressWarnings("unchecked") - public List getCustomPurposesImpliedConsent() { - return (List) this.getFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT); + public IntegerSet getCustomPurposesImpliedConsent() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT); } public Integer getDisclosedVendorsSegmentType() { return (Integer) this.getFieldValue(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE); } - @SuppressWarnings("unchecked") - public List getDisclosedVendors() { - return (List) this.getFieldValue(TcfCaV1Field.DISCLOSED_VENDORS); + public IntegerSet getDisclosedVendors() { + return (IntegerSet) this.getFieldValue(TcfCaV1Field.DISCLOSED_VENDORS); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 720230c2..71ea1938 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -6,6 +6,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.TcfEuV2Field; @@ -169,19 +170,16 @@ public Boolean getUseNonStandardStacks() { return (Boolean) this.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS); } - @SuppressWarnings("unchecked") - public List getSpecialFeatureOptins() { - return (List) this.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS); + public IntegerSet getSpecialFeatureOptins() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS); } - @SuppressWarnings("unchecked") - public List getPurposeConsents() { - return (List) this.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS); + public IntegerSet getPurposeConsents() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS); } - @SuppressWarnings("unchecked") - public List getPurposeLegitimateInterests() { - return (List) this.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS); + public IntegerSet getPurposeLegitimateInterests() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS); } public Boolean getPurposeOneTreatment() { @@ -192,14 +190,12 @@ public String getPublisherCountryCode() { return (String) this.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE); } - @SuppressWarnings("unchecked") - public List getVendorConsents() { - return (List) this.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS); + public IntegerSet getVendorConsents() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS); } - @SuppressWarnings("unchecked") - public List getVendorLegitimateInterests() { - return (List) this.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS); + public IntegerSet getVendorLegitimateInterests() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS); } @SuppressWarnings("unchecked") @@ -211,46 +207,40 @@ public Integer getPublisherPurposesSegmentType() { return (Integer) this.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE); } - @SuppressWarnings("unchecked") - public List getPublisherConsents() { - return (List) this.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS); + public IntegerSet getPublisherConsents() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS); } - @SuppressWarnings("unchecked") - public List getPublisherLegitimateInterests() { - return (List) this.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS); + public IntegerSet getPublisherLegitimateInterests() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS); } public Integer getNumCustomPurposes() { return (Integer) this.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES); } - @SuppressWarnings("unchecked") - public List getPublisherCustomConsents() { - return (List) this.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS); + public IntegerSet getPublisherCustomConsents() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS); } - @SuppressWarnings("unchecked") - public List getPublisherCustomLegitimateInterests() { - return (List) this.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS); + public IntegerSet getPublisherCustomLegitimateInterests() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS); } public Integer getVendorsAllowedSegmentType() { return (Integer) this.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE); } - @SuppressWarnings("unchecked") - public List getVendorsAllowed() { - return (List) this.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED); + public IntegerSet getVendorsAllowed() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED); } public Integer getVendorsDisclosedSegmentType() { return (Integer) this.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE); } - @SuppressWarnings("unchecked") - public List getVendorsDisclosed() { - return (List) this.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED); + public IntegerSet getVendorsDisclosed() { + return (IntegerSet) this.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 30eb0099..cab29238 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -32,7 +32,7 @@ protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); fields.put(HeaderV1Field.ID, new EncodableFixedInteger(6, HeaderV1.ID)); fields.put(HeaderV1Field.VERSION, new EncodableFixedInteger(6, HeaderV1.VERSION)); - fields.put(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange(new ArrayList<>(0))); + fields.put(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange()); return fields; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index e10efb4d..e8b35cd2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -51,9 +51,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, new EncodableFixedBitfield(12)); fields.put(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); fields.put(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); - fields.put(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, new EncodableOptimizedFixedRange(new ArrayList<>(0))); - fields.put(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, new EncodableOptimizedFixedRange(new ArrayList<>(0))); - fields.put(TcfCaV1Field.PUB_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, new ArrayList<>(0), false)); + fields.put(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, new EncodableOptimizedFixedRange()); + fields.put(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, new EncodableOptimizedFixedRange()); + fields.put(TcfCaV1Field.PUB_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, false)); return fields; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 94fa60ed..112470ce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -30,7 +30,7 @@ public TcfCaV1DisclosedVendorsSegment(String encodedString) { protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); - fields.put(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange(new ArrayList<>(0))); + fields.put(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange()); return fields; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index e840cc5a..c384204b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -48,10 +48,10 @@ public int getAsInt() { }; fields.put(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>(0))); + new EncodableFlexibleBitfield(getLengthSupplier)); fields.put(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, - new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>(0))); + new EncodableFlexibleBitfield(getLengthSupplier)); return fields; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 668b8ef0..69ef74c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -54,10 +54,10 @@ protected EncodableBitStringFields initializeFields() { fields.put(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); fields.put(TcfEuV2Field.PURPOSE_ONE_TREATMENT, new EncodableBoolean(false)); fields.put(TcfEuV2Field.PUBLISHER_COUNTRY_CODE, new EncodableFixedString(2, "AA")); - fields.put(TcfEuV2Field.VENDOR_CONSENTS, new EncodableOptimizedFixedRange(new ArrayList<>(0))); - fields.put(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, new EncodableOptimizedFixedRange(new ArrayList<>(0))); + fields.put(TcfEuV2Field.VENDOR_CONSENTS, new EncodableOptimizedFixedRange()); + fields.put(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, new EncodableOptimizedFixedRange()); - fields.put(TcfEuV2Field.PUBLISHER_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, new ArrayList<>(0), false)); + fields.put(TcfEuV2Field.PUBLISHER_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, false)); return fields; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 3e3cf369..67206974 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -48,10 +48,10 @@ public int getAsInt() { }; fields.put(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS, - new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>(0))); + new EncodableFlexibleBitfield(getLengthSupplier)); fields.put(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS, - new EncodableFlexibleBitfield(getLengthSupplier, new ArrayList<>(0))); + new EncodableFlexibleBitfield(getLengthSupplier)); return fields; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 7babd723..2597849d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -30,7 +30,7 @@ public TcfEuV2VendorsAllowedSegment(String encodedString) { protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, new EncodableFixedInteger(3, 2)); - fields.put(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange(new ArrayList<>(0))); + fields.put(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange()); return fields; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 3f5ed762..4dbf778e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -30,7 +30,7 @@ public TcfEuV2VendorsDisclosedSegment(String encodedString) { protected EncodableBitStringFields initializeFields() { EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); - fields.put(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange(new ArrayList<>(0))); + fields.put(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange()); return fields; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index d1890a59..58d95053 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -4,8 +4,10 @@ import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; +import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.field.TcfEuV2Field; @@ -362,9 +364,9 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { true, true, true, false, false, false, true, true, true)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - Arrays.asList(false, true, false)); + BitStringSet.of(1)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, - Arrays.asList(true, false, true)); + BitStringSet.of(0,2)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.LAST_UPDATED, utcDateTime); @@ -613,33 +615,29 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(2, tcfCaV1Section.getCmpVersion()); Assertions.assertEquals(413, tcfCaV1Section.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1Section.getUseNonStandardStacks()); - Assertions.assertEquals(Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true), + Assertions.assertEquals(Set.of(6, 7, 8, 9, 10, 11), tcfCaV1Section.getSpecialFeatureExpressConsent()); Assertions .assertEquals( - Arrays.asList(true, true, true, true, true, true, false, false, false, false, false, false, true, true, - true, true, true, true, false, false, false, false, false, false), + Set.of(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17), tcfCaV1Section.getPurposesExpressConsent()); Assertions .assertEquals( - Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true, false, false, - false, false, false, false, true, true, true, true, true, true), + Set.of(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23), tcfCaV1Section.getPurposesImpliedConsent()); - Assertions.assertEquals(Arrays.asList(12, 24, 48), tcfCaV1Section.getVendorExpressConsent()); - Assertions.assertEquals(Arrays.asList(18, 30), tcfCaV1Section.getVendorImpliedConsent()); + Assertions.assertEquals(Set.of(12, 24, 48), tcfCaV1Section.getVendorExpressConsent()); + Assertions.assertEquals(Set.of(18, 30), tcfCaV1Section.getVendorImpliedConsent()); Assertions .assertEquals( - Arrays.asList(true, true, true, false, false, false, true, true, true, false, false, false, true, true, - true, false, false, false, true, true, true, false, false, false), + Set.of(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20), tcfCaV1Section.getPubPurposesExpressConsent()); Assertions .assertEquals( - Arrays.asList(false, false, false, true, true, true, false, false, false, true, true, true, false, false, - false, true, true, true, false, false, false, true, true, true), + Set.of(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23), tcfCaV1Section.getPubPurposesImpliedConsent()); Assertions.assertEquals(3, tcfCaV1Section.getNumCustomPurposes()); - Assertions.assertEquals(Arrays.asList(false, true, false), tcfCaV1Section.getCustomPurposesExpressConsent()); - Assertions.assertEquals(Arrays.asList(true, false, true), tcfCaV1Section.getCustomPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(1), tcfCaV1Section.getCustomPurposesExpressConsent()); + Assertions.assertEquals(Set.of(0,2), tcfCaV1Section.getCustomPurposesImpliedConsent()); Assertions.assertEquals(utcDateTime, tcfCaV1Section.getCreated()); Assertions.assertEquals(utcDateTime, tcfCaV1Section.getLastUpdated()); @@ -685,19 +683,19 @@ public void testEncode3() { @Test public void testDecode1() { GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA"); - Assertions.assertEquals(Arrays.asList(28), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + Assertions.assertEquals(Set.of(28), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } @Test public void testDecode2() { GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA"); - Assertions.assertEquals(Arrays.asList(29), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + Assertions.assertEquals(Set.of(29), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } @Test public void testDecode3() { GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA"); - Assertions.assertEquals(Arrays.asList(1, 173, 722), + Assertions.assertEquals(Set.of(1, 173, 722), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } @@ -773,7 +771,7 @@ public void testConsistency() { Arrays.asList(true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS)); - Assertions.assertEquals(Arrays.asList(21, 32, 81, 128, 173, 210, 238, 755), + Assertions.assertEquals(Set.of(21, 32, 81, 128, 173, 210, 238, 755), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerTest.java deleted file mode 100644 index f5796ff4..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; - -public class EncodableFibonacciIntegerTest { - - @Test - public void testSubstring1() throws DecodingException, SubstringException { - Assertions.assertEquals("0011", new EncodableFibonacciInteger().substring(BitString.of("100111"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index ad194bbe..dc3e6cfc 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Arrays; +import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -47,14 +48,14 @@ public void testEncode2() throws EncodingException { public void testDecode1() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100")); - Assertions.assertEquals(Arrays.asList(28), encodableFixedIntegerRange.getValue()); + Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.getValue()); } @Test public void testDecode2() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101")); - Assertions.assertEquals(Arrays.asList(29), encodableFixedIntegerRange.getValue()); + Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.getValue()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 881e366a..5cfc68b5 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Arrays; +import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -47,25 +48,25 @@ public void testEncode4() { @Test public void testDecode1() { encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001")); - Assertions.assertEquals(Arrays.asList(12, 24, 48), encodableOptimizedFixedRange.getValue()); + Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode2() { encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001")); - Assertions.assertEquals(Arrays.asList(18, 30), encodableOptimizedFixedRange.getValue()); + Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode3() { encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001")); - Assertions.assertEquals(Arrays.asList(28), encodableOptimizedFixedRange.getValue()); + Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode4() { encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101")); - Assertions.assertEquals(Arrays.asList(29), encodableOptimizedFixedRange.getValue()); + Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.getValue()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index ca2d8d60..b2de58a2 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -3,7 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; import java.util.Arrays; -import java.util.List; +import java.util.BitSet; +import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -44,7 +45,9 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(6, 7, 2, 5)); + IntegerSet set = new BitStringSet(); + set.addAll(Arrays.asList(6, 7, 2, 5)); + FibonacciIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("000000000010001110011011", builder.build().toString()); } @@ -64,33 +67,33 @@ public void testEncode7() { @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(new ArrayList<>(), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000000"))); + Assertions.assertEquals(Set.of(), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000000"))); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2), FibonacciIntegerRangeEncoder.decode(BitString.of("0000000000010011"))); + Assertions.assertEquals(Set.of(2), FibonacciIntegerRangeEncoder.decode(BitString.of("0000000000010011"))); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2, 3, 4, 5, 6), FibonacciIntegerRangeEncoder.decode(BitString.of("00000000000110111011"))); + Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), FibonacciIntegerRangeEncoder.decode(BitString.of("00000000000110111011"))); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2, 5, 6, 7), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000010001110011011"))); + Assertions.assertEquals(Set.of(2, 5, 6, 7), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000010001110011011"))); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(Arrays.asList(3, 5, 6, 7, 8), + Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), FibonacciIntegerRangeEncoder.decode(BitString.of("0000000000100001110110011"))); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12), + Assertions.assertEquals(Set.of(2, 5, 6, 7, 8, 9, 10, 11, 12), FibonacciIntegerRangeEncoder.decode(BitString.of("00000000001000111001101011"))); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 188660d1..6af3290f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -15,96 +16,109 @@ public class FixedBitfieldEncoderTest { @Test public void testEncode1() { BitStringBuilder builder = new BitStringBuilder(); - FixedBitfieldEncoder.encode(builder, new ArrayList<>(), 2); + IntegerSet set = new BitStringSet(); + FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("00", builder.build().toString()); } @Test public void testEncode2() { BitStringBuilder builder = new BitStringBuilder(); - FixedBitfieldEncoder.encode(builder, Arrays.asList(false), 1); + IntegerSet set = new BitStringSet(); + FixedBitfieldEncoder.encode(builder, set, 1); Assertions.assertEquals("0", builder.build().toString()); } @Test public void testEncode3() { BitStringBuilder builder = new BitStringBuilder(); - FixedBitfieldEncoder.encode(builder, Arrays.asList(true), 1); + IntegerSet set = new BitStringSet(); + set.add(0); + FixedBitfieldEncoder.encode(builder, set, 1); Assertions.assertEquals("1", builder.build().toString()); } @Test public void testEncode4() { BitStringBuilder builder = new BitStringBuilder(); - FixedBitfieldEncoder.encode(builder, Arrays.asList(false, false), 2); + IntegerSet set = new BitStringSet(); + FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("00", builder.build().toString()); } @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - FixedBitfieldEncoder.encode(builder, Arrays.asList(false, true), 2); + IntegerSet set = new BitStringSet(); + set.addInt(1); + FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("01", builder.build().toString()); } @Test public void testEncode6() { BitStringBuilder builder = new BitStringBuilder(); - FixedBitfieldEncoder.encode(builder, Arrays.asList(true, false), 2); + IntegerSet set = new BitStringSet(); + set.addInt(0); + FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("10", builder.build().toString()); } @Test public void testEncode7() { BitStringBuilder builder = new BitStringBuilder(); - FixedBitfieldEncoder.encode(builder, Arrays.asList(true, true), 2); + IntegerSet set = new BitStringSet(); + set.addInt(0); + set.addInt(1); + FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("11", builder.build().toString()); } @Test public void testEncode8() { - try { + Assertions.assertThrows(IndexOutOfBoundsException.class, () -> { BitStringBuilder builder = new BitStringBuilder(); - FixedBitfieldEncoder.encode(builder, Arrays.asList(true, true, true), 2); - Assertions.fail("EncodingException expected"); - } catch (EncodingException e) { - - } + IntegerSet set = new BitStringSet(BitStringSet.MAX_COLLECTION_SIZE); + for(int i = 0; i <= BitStringSet.MAX_COLLECTION_SIZE; i++) { + set.addInt(i); + } + FixedBitfieldEncoder.encode(builder, set, 2); + }); } @Test public void testDecode1() { - Assertions.assertEquals(new ArrayList<>(), FixedBitfieldEncoder.decode(BitString.of(""))); + Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of(""))); } @Test public void testDecode2() { - Assertions.assertEquals(Arrays.asList(false), FixedBitfieldEncoder.decode(BitString.of("0"))); + Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of("0"))); } @Test public void testDecode3() { - Assertions.assertEquals(Arrays.asList(true), FixedBitfieldEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(Set.of(0), FixedBitfieldEncoder.decode(BitString.of("1"))); } @Test public void testDecode4() { - Assertions.assertEquals(Arrays.asList(false, false), FixedBitfieldEncoder.decode(BitString.of("00"))); + Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of("00"))); } @Test public void testDecode5() { - Assertions.assertEquals(Arrays.asList(false, true), FixedBitfieldEncoder.decode(BitString.of("01"))); + Assertions.assertEquals(Set.of(1), FixedBitfieldEncoder.decode(BitString.of("01"))); } @Test public void testDecode6() { - Assertions.assertEquals(Arrays.asList(true, false), FixedBitfieldEncoder.decode(BitString.of("10"))); + Assertions.assertEquals(Set.of(0), FixedBitfieldEncoder.decode(BitString.of("10"))); } @Test public void testDecode7() { - Assertions.assertEquals(Arrays.asList(true, true), FixedBitfieldEncoder.decode(BitString.of("11"))); + Assertions.assertEquals(Set.of(0, 1), FixedBitfieldEncoder.decode(BitString.of("11"))); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 1f9b42ba..19f8bce7 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -3,7 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; import java.util.Arrays; -import java.util.List; +import java.util.BitSet; +import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -46,7 +47,9 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - FixedIntegerRangeEncoder.encode(builder, Arrays.asList(5, 2, 7, 6)); + IntegerSet set = new BitStringSet(); + set.addAll(Arrays.asList(6, 7, 2, 5)); + FibonacciIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", builder.build().toString()); } @@ -86,47 +89,47 @@ public void testEncode9() { @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(new ArrayList<>(), FixedIntegerRangeEncoder.decode(BitString.of("000000000000"))); + Assertions.assertEquals(Set.of(), FixedIntegerRangeEncoder.decode(BitString.of("000000000000"))); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2), FixedIntegerRangeEncoder.decode(BitString.of("00000000000100000000000000010"))); + Assertions.assertEquals(Set.of(2), FixedIntegerRangeEncoder.decode(BitString.of("00000000000100000000000000010"))); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2, 3, 4, 5, 6), + Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), FixedIntegerRangeEncoder.decode(BitString.of("000000000001100000000000000100000000000000110"))); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2, 5, 6, 7), + Assertions.assertEquals(Set.of(2, 5, 6, 7), FixedIntegerRangeEncoder.decode(BitString.of("00000000001000000000000000010100000000000001010000000000000111"))); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(Arrays.asList(3, 5, 6, 7, 8), + Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), FixedIntegerRangeEncoder.decode(BitString.of("00000000001000000000000000011100000000000001010000000000001000"))); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(Arrays.asList(12, 24, 48), + Assertions.assertEquals(Set.of(12, 24, 48), FixedIntegerRangeEncoder.decode(BitString.of("000000000011000000000000011000000000000001100000000000000110000"))); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(Arrays.asList(12, 24, 48, 49), FixedIntegerRangeEncoder + Assertions.assertEquals(Set.of(12, 24, 48, 49), FixedIntegerRangeEncoder .decode(BitString.of("0000000000110000000000000110000000000000011000100000000001100000000000000110001"))); } @Test public void testDecode8() throws DecodingException { - Assertions.assertEquals(Arrays.asList(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), FixedIntegerRangeEncoder.decode( + Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), FixedIntegerRangeEncoder.decode( BitString.of("00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010"))); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java index 5ed478a5..4eb5806e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; @@ -33,7 +34,7 @@ public void testEncode3() { public void testDecode1() { HeaderV1 headerV1 = new HeaderV1(); headerV1.decode("DBAA"); - Assertions.assertEquals(new ArrayList<>(), headerV1.getFieldValue("SectionIds")); + Assertions.assertEquals(Set.of(), headerV1.getFieldValue("SectionIds")); Assertions.assertEquals(headerV1.getFieldValue("Version"), headerV1.getVersion()); Assertions.assertEquals(headerV1.getFieldValue("SectionIds"), headerV1.getSectionsIds()); } @@ -42,7 +43,7 @@ public void testDecode1() { public void testDecode2() { HeaderV1 headerV1 = new HeaderV1(); headerV1.decode("DBABMA"); - Assertions.assertEquals(Arrays.asList(2), headerV1.getFieldValue("SectionIds")); + Assertions.assertEquals(Set.of(2), headerV1.getFieldValue("SectionIds")); Assertions.assertEquals(headerV1.getFieldValue("Version"), headerV1.getVersion()); Assertions.assertEquals(headerV1.getFieldValue("SectionIds"), headerV1.getSectionsIds()); } @@ -51,7 +52,7 @@ public void testDecode2() { public void testDecode3() { HeaderV1 headerV1 = new HeaderV1(); headerV1.decode("DBACNYA"); - Assertions.assertEquals(Arrays.asList(2, 6), headerV1.getFieldValue("SectionIds")); + Assertions.assertEquals(Set.of(2, 6), headerV1.getFieldValue("SectionIds")); Assertions.assertEquals(headerV1.getFieldValue("Version"), headerV1.getVersion()); Assertions.assertEquals(headerV1.getFieldValue("SectionIds"), headerV1.getSectionsIds()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java index 3f53a288..db8d267f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java @@ -6,9 +6,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.datatype.RangeEntry; +import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; @@ -50,8 +52,8 @@ public void testEncode2() { Arrays.asList(false, false, false, true, true, true, false, false, false, true, true, true, false, false, false, true, true, true, false, false, false, true, true, true)); tcfCaV1.setFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); - tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, Arrays.asList(false, true, false)); - tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Arrays.asList(true, false, true)); + tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, Set.of(1)); + tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Set.of(0,2)); tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); @@ -75,7 +77,7 @@ public void testEncode3() throws EncodingException, InvalidFieldException { public void testEncode4() throws EncodingException, InvalidFieldException { List pubRestrictions = new ArrayList<>(); - pubRestrictions.add(new RangeEntry(1, 1, Arrays.asList(1, 2, 3, 5, 6, 7, 9))); + pubRestrictions.add(new RangeEntry(1, 1, Set.of(1, 2, 3, 5, 6, 7, 9))); TcfCaV1 tcfCaV1 = new TcfCaV1(); tcfCaV1.setFieldValue(TcfCaV1Field.PUB_RESTRICTIONS, pubRestrictions); @@ -106,8 +108,8 @@ public void testDecode1() { Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), tcfCaV1.getPurposesImpliedConsent()); - Assertions.assertEquals(Arrays.asList(), tcfCaV1.getVendorExpressConsent()); - Assertions.assertEquals(Arrays.asList(), tcfCaV1.getVendorImpliedConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getVendorExpressConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getVendorImpliedConsent()); Assertions.assertEquals( Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false), @@ -143,8 +145,8 @@ public void testDecode2() { Assertions.assertEquals(Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, false, false, false, true, true, true, true, true, true), tcfCaV1.getPurposesImpliedConsent()); - Assertions.assertEquals(Arrays.asList(12, 24, 48), tcfCaV1.getVendorExpressConsent()); - Assertions.assertEquals(Arrays.asList(18, 30), tcfCaV1.getVendorImpliedConsent()); + Assertions.assertEquals(Set.of(12, 24, 48), tcfCaV1.getVendorExpressConsent()); + Assertions.assertEquals(Set.of(18, 30), tcfCaV1.getVendorImpliedConsent()); Assertions .assertEquals( Arrays.asList(true, true, true, false, false, false, true, true, true, false, false, false, true, true, @@ -171,7 +173,7 @@ public void testDecode3() throws DecodingException { TcfCaV1 tcfCaV1 = new TcfCaV1("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.IAGO5w"); Assertions.assertEquals(1, tcfCaV1.getDisclosedVendorsSegmentType()); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 5, 6, 7, 10, 11, 12), tcfCaV1.getDisclosedVendors()); + Assertions.assertEquals(Set.of(1, 2, 3, 5, 6, 7, 10, 11, 12), tcfCaV1.getDisclosedVendors()); } @Test @@ -182,7 +184,7 @@ public void testDecode4() throws DecodingException { Assertions.assertEquals(1, pubRestictions.size()); Assertions.assertEquals(1, pubRestictions.get(0).getKey()); Assertions.assertEquals(1, pubRestictions.get(0).getType()); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 5, 6, 7, 9), pubRestictions.get(0).getIds()); + Assertions.assertEquals(Set.of(1, 2, 3, 5, 6, 7, 9), pubRestictions.get(0).getIds()); } @Test() diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 945f7468..8afb8a0c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -2,11 +2,14 @@ import java.time.ZoneId; import java.time.ZonedDateTime; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.datatype.RangeEntry; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; @@ -72,8 +75,8 @@ public void testDecode1() { tcfEuV2.getPurposeLegitimateInterests()); Assertions.assertEquals(false, tcfEuV2.getPurposeOneTreatment()); Assertions.assertEquals("AA", tcfEuV2.getPublisherCountryCode()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getVendorConsents()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getVendorLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getVendorConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getVendorLegitimateInterests()); Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherRestrictions()); Assertions.assertEquals(3, tcfEuV2.getPublisherPurposesSegmentType()); Assertions @@ -89,9 +92,9 @@ public void testDecode1() { Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherCustomConsents()); Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherCustomLegitimateInterests()); Assertions.assertEquals(2, tcfEuV2.getVendorsAllowedSegmentType()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getVendorsAllowed()); + Assertions.assertEquals(Set.of(), tcfEuV2.getVendorsAllowed()); Assertions.assertEquals(1, tcfEuV2.getVendorsDisclosedSegmentType()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getVendorsDisclosed()); + Assertions.assertEquals(Set.of(), tcfEuV2.getVendorsDisclosed()); Assertions.assertEquals(2, tcfEuV2.getId()); } @@ -125,8 +128,8 @@ public void testDecode2() { tcfEuV2.getPurposeLegitimateInterests()); Assertions.assertEquals(false, tcfEuV2.getPurposeOneTreatment()); Assertions.assertEquals("AA", tcfEuV2.getPublisherCountryCode()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getVendorConsents()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getVendorLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getVendorConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getVendorLegitimateInterests()); Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherRestrictions()); Assertions.assertEquals(3, tcfEuV2.getPublisherPurposesSegmentType()); Assertions @@ -142,9 +145,9 @@ public void testDecode2() { Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherCustomConsents()); Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherCustomLegitimateInterests()); Assertions.assertEquals(2, tcfEuV2.getVendorsAllowedSegmentType()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getVendorsAllowed()); + Assertions.assertEquals(Set.of(), tcfEuV2.getVendorsAllowed()); Assertions.assertEquals(1, tcfEuV2.getVendorsDisclosedSegmentType()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getVendorsDisclosed()); + Assertions.assertEquals(Set.of(), tcfEuV2.getVendorsDisclosed()); Assertions.assertEquals(2, tcfEuV2.getId()); } @@ -171,7 +174,7 @@ public void testDecode3() { Assertions.assertEquals(3, tcfEuV2.getFieldValue("PublisherPurposesSegmentType")); Assertions.assertEquals(2, tcfEuV2.getFieldValue("VendorsAllowedSegmentType")); - List vendorsAllowed = (List) tcfEuV2.getFieldValue("VendorsAllowed"); + List vendorsAllowed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue("VendorsAllowed")); Assertions.assertEquals(434, vendorsAllowed.size()); Assertions.assertEquals(1, vendorsAllowed.get(0)); Assertions.assertEquals(2, vendorsAllowed.get(1)); @@ -194,7 +197,7 @@ public void testDecode3() { Assertions.assertEquals(791, vendorsAllowed.get(vendorsAllowed.size() - 1)); Assertions.assertEquals(1, tcfEuV2.getFieldValue("VendorsDisclosedSegmentType")); - List vendorsDisclosed = (List) tcfEuV2.getFieldValue("VendorsDisclosed"); + List vendorsDisclosed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue("VendorsDisclosed")); Assertions.assertEquals(434, vendorsDisclosed.size()); Assertions.assertEquals(1, vendorsDisclosed.get(0)); Assertions.assertEquals(2, vendorsDisclosed.get(1)); @@ -284,9 +287,9 @@ public void testDecode4() { Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); Assertions.assertEquals("US", tcfEuV2.getFieldValue("PublisherCountryCode")); - Assertions.assertEquals(772, ((List) tcfEuV2.getFieldValue("VendorConsents")).size()); + Assertions.assertEquals(772, ((IntegerSet) tcfEuV2.getFieldValue("VendorConsents")).size()); - Assertions.assertEquals(280, ((List) tcfEuV2.getFieldValue("VendorLegitimateInterests")).size()); + Assertions.assertEquals(280, ((IntegerSet) tcfEuV2.getFieldValue("VendorLegitimateInterests")).size()); } @SuppressWarnings("unchecked") @@ -321,9 +324,9 @@ public void testDecode5() { Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); Assertions.assertEquals("US", tcfEuV2.getFieldValue("PublisherCountryCode")); - Assertions.assertEquals(693, ((List) tcfEuV2.getFieldValue("VendorConsents")).size()); + Assertions.assertEquals(693, ((IntegerSet) tcfEuV2.getFieldValue("VendorConsents")).size()); - Assertions.assertEquals(254, ((List) tcfEuV2.getFieldValue("VendorLegitimateInterests")).size()); + Assertions.assertEquals(254, ((IntegerSet) tcfEuV2.getFieldValue("VendorLegitimateInterests")).size()); } @Test @@ -356,9 +359,9 @@ public void testDecode6() { Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); Assertions.assertEquals("US", tcfEuV2.getFieldValue("PublisherCountryCode")); - Assertions.assertEquals(Arrays.asList(2, 6, 8, 12, 18, 23, 25, 37, 42), tcfEuV2.getFieldValue("VendorConsents")); + Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 25, 37, 42), tcfEuV2.getFieldValue("VendorConsents")); - Assertions.assertEquals(Arrays.asList(2, 6, 8, 12, 18, 23, 37, 42), + Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 37, 42), tcfEuV2.getFieldValue("VendorLegitimateInterests")); } @@ -393,16 +396,16 @@ public void testDecode7() throws DecodingException { Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); Assertions.assertEquals("GB", tcfEuV2.getFieldValue("PublisherCountryCode")); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 755), tcfEuV2.getFieldValue("VendorConsents")); + Assertions.assertEquals(Set.of(1, 2, 3, 755), tcfEuV2.getFieldValue("VendorConsents")); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9), + Assertions.assertEquals(Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9), tcfEuV2.getFieldValue("VendorLegitimateInterests")); Assertions.assertEquals(1, ((List)tcfEuV2.getFieldValue("PublisherRestrictions")).size()); RangeEntry rangeEntry = ((List)tcfEuV2.getFieldValue("PublisherRestrictions")).get(0); Assertions.assertEquals(1, rangeEntry.getKey()); Assertions.assertEquals(0, rangeEntry.getType()); - Assertions.assertEquals(Arrays.asList(10), rangeEntry.getIds()); + Assertions.assertEquals(Set.of(10), rangeEntry.getIds()); } @Test() From 949a235069b7606c319f4bc5cdceb839379b8e8d Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 1 Apr 2025 14:59:33 -0400 Subject: [PATCH 020/146] fix tests --- .../iab/gpp/encoder/datatype/RangeEntry.java | 4 +- .../datatype/encoder/BitStringSet.java | 2 +- .../encoder/datatype/encoder/ManagedList.java | 5 ++ .../encoder/datatype/encoder/ManagedSet.java | 4 + .../com/iab/gpp/encoder/GppModelTest.java | 19 ++--- .../encoder/FixedIntegerRangeEncoderTest.java | 2 +- .../iab/gpp/encoder/section/TcfCaV1Test.java | 50 +++++------- .../iab/gpp/encoder/section/TcfEuV2Test.java | 78 +++++++------------ 8 files changed, 70 insertions(+), 94 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 46780981..8b8fd0a3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.Set; +import com.iab.gpp.encoder.datatype.encoder.BitStringSet; public class RangeEntry { @@ -13,7 +14,8 @@ public RangeEntry(int key, int type, Set ids) { super(); this.key = key; this.type = type; - this.ids = ids; + this.ids = new BitStringSet(); + this.ids.addAll(ids); } public int getKey() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java index d5353ad6..1469e00f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java @@ -55,7 +55,7 @@ public void clear() { @Override public boolean isEmpty() { - return bitSet.nextSetBit(from) != -1; + return bitSet.nextSetBit(from) == -1; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java index e9730a04..fef0fb6e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java @@ -32,4 +32,9 @@ public T set(int index, T value) { } return prior; } + + @Override + public String toString() { + return delegate.toString(); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java index fea40f78..3cbdf00f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java @@ -57,4 +57,8 @@ public boolean removeInt(int value) { return modified; } + @Override + public String toString() { + return delegate.toString(); + } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 58d95053..d6096ac7 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -347,21 +347,17 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_LIST_VERSION, 413); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.USE_NON_STANDARD_STACKS, true); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, - Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true)); + Arrays.asList(6, 7, 8, 9, 10, 11)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, - Arrays.asList(true, true, true, true, true, true, false, false, false, false, false, false, true, true, true, - true, true, true, false, false, false, false, false, false)); + Arrays.asList(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, - Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, - false, false, false, true, true, true, true, true, true)); + Arrays.asList(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, - Arrays.asList(true, true, true, false, false, false, true, true, true, false, false, false, true, true, true, - false, false, false, true, true, true, false, false, false)); + Arrays.asList(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, - Arrays.asList(false, false, false, true, true, true, false, false, false, true, true, true, false, false, false, - true, true, true, false, false, false, true, true, true)); + Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, BitStringSet.of(1)); @@ -757,7 +753,7 @@ public void testConsistency() { GppModel fromObjectModel = new GppModel(); fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, - Arrays.asList(true, true, true, true, true, true, true, true, true, true)); + Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)); fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, Arrays.asList(32, 128, 81, 210, 755, 21, 173, 238)); @@ -768,8 +764,7 @@ public void testConsistency() { GppModel decodedModel = new GppModel(fromObjectModel.encode()); Assertions.assertEquals( - Arrays.asList(true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, - false, false, false, false, false, false, false, false, false), + Set.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals(Set.of(21, 32, 81, 128, 173, 210, 238, 755), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 19f8bce7..8db9a46c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -49,7 +49,7 @@ public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); IntegerSet set = new BitStringSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); - FibonacciIntegerRangeEncoder.encode(builder, set); + FixedIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", builder.build().toString()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java index db8d267f..50857c29 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java @@ -36,21 +36,17 @@ public void testEncode2() { tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_LIST_VERSION, 413); tcfCaV1.setFieldValue(TcfCaV1Field.USE_NON_STANDARD_STACKS, true); tcfCaV1.setFieldValue(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, - Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true)); + Arrays.asList(6, 7, 8, 9, 10, 11)); tcfCaV1.setFieldValue(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, - Arrays.asList(true, true, true, true, true, true, false, false, false, false, false, false, true, true, true, - true, true, true, false, false, false, false, false, false)); + Arrays.asList(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17)); tcfCaV1.setFieldValue(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, - Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, - false, false, false, true, true, true, true, true, true)); + Arrays.asList(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23)); tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48)); tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30)); tcfCaV1.setFieldValue(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, - Arrays.asList(true, true, true, false, false, false, true, true, true, false, false, false, true, true, true, - false, false, false, true, true, true, false, false, false)); + Arrays.asList(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20)); tcfCaV1.setFieldValue(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, - Arrays.asList(false, false, false, true, true, true, false, false, false, true, true, true, false, false, false, - true, true, true, false, false, false, true, true, true)); + Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23)); tcfCaV1.setFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, Set.of(1)); tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Set.of(0,2)); @@ -96,31 +92,27 @@ public void testDecode1() { Assertions.assertEquals(0, tcfCaV1.getVendorListVersion()); Assertions.assertEquals(false, tcfCaV1.getUseNonStandardStacks()); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfCaV1.getSpecialFeatureExpressConsent()); Assertions .assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfCaV1.getPurposesExpressConsent()); Assertions .assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfCaV1.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getVendorExpressConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getVendorImpliedConsent()); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfCaV1.getPubPurposesExpressConsent()); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfCaV1.getPubPurposesImpliedConsent()); Assertions.assertEquals(0, tcfCaV1.getNumCustomPurposes()); - Assertions.assertEquals(Arrays.asList(), tcfCaV1.getCustomPurposesExpressConsent()); - Assertions.assertEquals(Arrays.asList(), tcfCaV1.getCustomPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getCustomPurposesExpressConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getCustomPurposesImpliedConsent()); Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getCreated()); Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getLastUpdated()); @@ -137,29 +129,25 @@ public void testDecode2() { Assertions.assertEquals(2, tcfCaV1.getCmpVersion()); Assertions.assertEquals(413, tcfCaV1.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1.getUseNonStandardStacks()); - Assertions.assertEquals(Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true), + Assertions.assertEquals(Set.of(6, 7, 8, 9, 10, 11), tcfCaV1.getSpecialFeatureExpressConsent()); - Assertions.assertEquals(Arrays.asList(true, true, true, true, true, true, false, false, false, false, false, false, - true, true, true, true, true, true, false, false, false, false, false, false), + Assertions.assertEquals(Set.of(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17), tcfCaV1.getPurposesExpressConsent()); - Assertions.assertEquals(Arrays.asList(false, false, false, false, false, false, true, true, true, true, true, true, - false, false, false, false, false, false, true, true, true, true, true, true), + Assertions.assertEquals(Set.of(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23), tcfCaV1.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(12, 24, 48), tcfCaV1.getVendorExpressConsent()); Assertions.assertEquals(Set.of(18, 30), tcfCaV1.getVendorImpliedConsent()); Assertions .assertEquals( - Arrays.asList(true, true, true, false, false, false, true, true, true, false, false, false, true, true, - true, false, false, false, true, true, true, false, false, false), + Set.of(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20), tcfCaV1.getPubPurposesExpressConsent()); Assertions .assertEquals( - Arrays.asList(false, false, false, true, true, true, false, false, false, true, true, true, false, false, - false, true, true, true, false, false, false, true, true, true), + Set.of(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23), tcfCaV1.getPubPurposesImpliedConsent()); Assertions.assertEquals(3, tcfCaV1.getNumCustomPurposes()); - Assertions.assertEquals(Arrays.asList(false, true, false), tcfCaV1.getCustomPurposesExpressConsent()); - Assertions.assertEquals(Arrays.asList(true, false, true), tcfCaV1.getCustomPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(1), tcfCaV1.getCustomPurposesExpressConsent()); + Assertions.assertEquals(Set.of(0, 2), tcfCaV1.getCustomPurposesImpliedConsent()); Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getCreated()); Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getLastUpdated()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 8afb8a0c..899dea2d 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -32,16 +32,14 @@ public void testEncode2() { Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE)); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS)); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS)); Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES)); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS)); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS)); + Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS)); + Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS)); Assertions.assertEquals("CPSG_8APSG_8AAAAAAENAACgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA", tcfEuV2.encode()); } @@ -62,16 +60,14 @@ public void testDecode1() { Assertions.assertEquals(false, tcfEuV2.getIsServiceSpecific()); Assertions.assertEquals(false, tcfEuV2.getUseNonStandardStacks()); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getSpecialFeatureOptins()); Assertions .assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getPurposeConsents()); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getPurposeLegitimateInterests()); Assertions.assertEquals(false, tcfEuV2.getPurposeOneTreatment()); Assertions.assertEquals("AA", tcfEuV2.getPublisherCountryCode()); @@ -81,16 +77,14 @@ public void testDecode1() { Assertions.assertEquals(3, tcfEuV2.getPublisherPurposesSegmentType()); Assertions .assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getPublisherConsents()); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getPublisherLegitimateInterests()); Assertions.assertEquals(0, tcfEuV2.getNumCustomPurposes()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherCustomConsents()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherCustomLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomLegitimateInterests()); Assertions.assertEquals(2, tcfEuV2.getVendorsAllowedSegmentType()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorsAllowed()); Assertions.assertEquals(1, tcfEuV2.getVendorsDisclosedSegmentType()); @@ -115,16 +109,14 @@ public void testDecode2() { Assertions.assertEquals(true, tcfEuV2.getIsServiceSpecific()); Assertions.assertEquals(false, tcfEuV2.getUseNonStandardStacks()); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getSpecialFeatureOptins()); Assertions .assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getPurposeConsents()); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getPurposeLegitimateInterests()); Assertions.assertEquals(false, tcfEuV2.getPurposeOneTreatment()); Assertions.assertEquals("AA", tcfEuV2.getPublisherCountryCode()); @@ -134,16 +126,14 @@ public void testDecode2() { Assertions.assertEquals(3, tcfEuV2.getPublisherPurposesSegmentType()); Assertions .assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getPublisherConsents()); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getPublisherLegitimateInterests()); Assertions.assertEquals(0, tcfEuV2.getNumCustomPurposes()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherCustomConsents()); - Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherCustomLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomLegitimateInterests()); Assertions.assertEquals(2, tcfEuV2.getVendorsAllowedSegmentType()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorsAllowed()); Assertions.assertEquals(1, tcfEuV2.getVendorsDisclosedSegmentType()); @@ -272,16 +262,14 @@ public void testDecode4() { Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); Assertions.assertEquals( - Arrays.asList(true, false, false, false, false, false, false, false, false, false, false, false), + Set.of(0), tcfEuV2.getFieldValue("SpecialFeatureOptins")); Assertions .assertEquals( - Arrays.asList(true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, - false, false, false, false, false, false, false, false, false), + Set.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), tcfEuV2.getFieldValue("PurposeConsents")); Assertions.assertEquals( - Arrays.asList(false, true, false, false, false, true, true, true, true, true, false, false, false, false, false, - false, false, false, false, false, false, false, false, false), + Set.of(1, 5, 6, 7, 8, 9), tcfEuV2.getFieldValue("PurposeLegitimateInterests")); Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); @@ -309,16 +297,14 @@ public void testDecode5() { Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); Assertions.assertEquals( - Arrays.asList(true, false, false, false, false, false, false, false, false, false, false, false), + Set.of(0), tcfEuV2.getFieldValue("SpecialFeatureOptins")); Assertions .assertEquals( - Arrays.asList(true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, - false, false, false, false, false, false, false, false, false), + Set.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), tcfEuV2.getFieldValue("PurposeConsents")); Assertions.assertEquals( - Arrays.asList(false, true, false, false, false, true, true, true, true, true, false, false, false, false, false, - false, false, false, false, false, false, false, false, false), + Set.of(1, 5, 6, 7, 8, 9), tcfEuV2.getFieldValue("PurposeLegitimateInterests")); Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); @@ -344,16 +330,14 @@ public void testDecode6() { Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); Assertions.assertEquals( - Arrays.asList(false, false, false, false, false, false, false, false, false, false, false, false), + Set.of(), tcfEuV2.getFieldValue("SpecialFeatureOptins")); Assertions .assertEquals( - Arrays.asList(true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, - false, false, false, false, false, false, false, false, false), + Set.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), tcfEuV2.getFieldValue("PurposeConsents")); Assertions.assertEquals( - Arrays.asList(false, true, true, true, true, true, true, true, true, true, false, false, false, false, false, - false, false, false, false, false, false, false, false, false), + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9), tcfEuV2.getFieldValue("PurposeLegitimateInterests")); Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); @@ -382,15 +366,13 @@ public void testDecode7() throws DecodingException { Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); Assertions.assertEquals( - Arrays.asList(true, false, false, false, false, false, false, false, false, false, false, false), + Set.of(0), tcfEuV2.getFieldValue("SpecialFeatureOptins")); Assertions.assertEquals( - Arrays.asList(true, false, false, false, false, false, false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(0), tcfEuV2.getFieldValue("PurposeConsents")); Assertions.assertEquals( - Arrays.asList(false, true, false, false, false, false, true, false, true, true, false, false, false, false, - false, false, false, false, false, false, false, false, false, false), + Set.of(1, 6, 8, 9), tcfEuV2.getFieldValue("PurposeLegitimateInterests")); Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); From 6323d96f4820788b74215b41c401814418dcfbbc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 1 Apr 2025 15:39:26 -0400 Subject: [PATCH 021/146] move and rename --- .../java/com/iab/gpp/encoder/GppModel.java | 1 - .../EncodableFibonacciIntegerRange.java | 4 +- .../datatype/EncodableFixedBitfield.java | 6 +- .../datatype/EncodableFixedIntegerList.java | 3 +- .../datatype/EncodableFixedIntegerRange.java | 4 +- .../datatype/EncodableFlexibleBitfield.java | 5 +- .../EncodableOptimizedFibonacciRange.java | 3 +- .../EncodableOptimizedFixedRange.java | 4 +- ...ManagedList.java => ManagedFixedList.java} | 7 +- ...ManagedSet.java => ManagedIntegerSet.java} | 9 +-- .../datatype/encoder/BaseIntegerSet.java | 64 +++++++++++++++++++ .../datatype/encoder/BitStringSet.java | 2 +- .../encoder/datatype/encoder/IntegerSet.java | 63 ++---------------- .../encoder/segment/HeaderV1CoreSegment.java | 1 - .../encoder/segment/TcfCaV1CoreSegment.java | 1 - .../TcfCaV1DisclosedVendorsSegment.java | 1 - .../TcfCaV1PublisherPurposesSegment.java | 1 - .../encoder/segment/TcfEuV2CoreSegment.java | 1 - .../TcfEuV2PublisherPurposesSegment.java | 1 - .../segment/TcfEuV2VendorsAllowedSegment.java | 1 - .../TcfEuV2VendorsDisclosedSegment.java | 1 - .../FibonacciIntegerRangeEncoderTest.java | 1 - .../encoder/FixedBitfieldEncoderTest.java | 3 - .../encoder/FixedIntegerRangeEncoderTest.java | 1 - .../iab/gpp/encoder/section/TcfCaV1Test.java | 1 - .../iab/gpp/encoder/section/TcfEuV2Test.java | 4 +- 26 files changed, 88 insertions(+), 105 deletions(-) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{encoder/ManagedList.java => ManagedFixedList.java} (73%) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{encoder/ManagedSet.java => ManagedIntegerSet.java} (79%) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index fc10cb48..8b097970 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -6,7 +6,6 @@ import java.util.List; import java.util.Map; import java.util.PrimitiveIterator; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index cc3543f4..f9d7d4e4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.BitStringSet; @@ -9,7 +8,6 @@ import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -62,6 +60,6 @@ public void setValue(Object value) { @Override public IntegerSet getValue() { - return new ManagedSet(this, super.getValue()); + return new ManagedIntegerSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index e6d131d4..e22fe0b5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -1,15 +1,11 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -56,6 +52,6 @@ public void setValue(Object value) { @Override public IntegerSet getValue() { - return new ManagedSet(this, super.getValue()); + return new ManagedIntegerSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 3ffd03e5..d3167acf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -6,7 +6,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; -import com.iab.gpp.encoder.datatype.encoder.ManagedList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -67,6 +66,6 @@ public void setValue(Object value) { @Override public List getValue() { - return new ManagedList<>(this, super.getValue()); + return new ManagedFixedList<>(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 63a6352d..f19a6dc7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -1,14 +1,12 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -61,6 +59,6 @@ public void setValue(Object value) { @Override public IntegerSet getValue() { - return new ManagedSet(this, super.getValue()); + return new ManagedIntegerSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 1b344a25..6c24824a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; import java.util.function.IntSupplier; import com.iab.gpp.encoder.bitstring.BitString; @@ -10,7 +8,6 @@ import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -57,6 +54,6 @@ public void setValue(Object value) { @Override public IntegerSet getValue() { - return new ManagedSet(this, super.getValue()); + return new ManagedIntegerSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java index 4f5dc798..7c8f4b66 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java @@ -6,7 +6,6 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFibonacciRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -68,6 +67,6 @@ public void setValue(Object value) { @Override public IntegerSet getValue() { - return new ManagedSet(this, super.getValue()); + return new ManagedIntegerSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index adbd0a10..6dec6b93 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -1,13 +1,11 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.datatype.encoder.ManagedSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -61,6 +59,6 @@ public void setValue(Object value) { @Override public IntegerSet getValue() { - return new ManagedSet(this, super.getValue()); + return new ManagedIntegerSet(this, super.getValue()); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java similarity index 73% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java index fef0fb6e..3aa9192a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java @@ -1,15 +1,14 @@ -package com.iab.gpp.encoder.datatype.encoder; +package com.iab.gpp.encoder.datatype; import java.util.AbstractList; import java.util.List; -import com.iab.gpp.encoder.datatype.DataType; -public final class ManagedList extends AbstractList { +final class ManagedFixedList extends AbstractList { private final DataType parent; private final List delegate; - public ManagedList(DataType parent, List delegate) { + ManagedFixedList(DataType parent, List delegate) { this.parent = parent; this.delegate = delegate; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java similarity index 79% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java index 3cbdf00f..5fe46391 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/ManagedSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java @@ -1,14 +1,15 @@ -package com.iab.gpp.encoder.datatype.encoder; +package com.iab.gpp.encoder.datatype; import java.util.PrimitiveIterator; -import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.encoder.BaseIntegerSet; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -public final class ManagedSet extends IntegerSet { +final class ManagedIntegerSet extends BaseIntegerSet { private final DataType parent; private final IntegerSet delegate; - public ManagedSet(DataType parent, IntegerSet delegate) { + ManagedIntegerSet(DataType parent, IntegerSet delegate) { this.parent = parent; this.delegate = delegate; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java new file mode 100644 index 00000000..bbdf0c2e --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java @@ -0,0 +1,64 @@ +package com.iab.gpp.encoder.datatype.encoder; + +import java.util.AbstractSet; +import java.util.Collection; +import java.util.PrimitiveIterator; + +public abstract class BaseIntegerSet extends AbstractSet implements IntegerSet { + public abstract boolean containsInt(int value); + + @Override + public final boolean contains(Object value) { + if (value instanceof Integer) { + return containsInt((Integer) value); + } + return false; + } + + @Override + public final boolean add(Integer value) { + if (value == null) { + return false; + } + return addInt((Integer) value); + } + + public abstract boolean addInt(int value); + + @Override + public final boolean remove(Object value) { + if (value instanceof Integer) { + return removeInt((Integer) value); + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } + + @Override + public boolean retainAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (!c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } + + public abstract boolean removeInt(int value); + + @Override + public abstract PrimitiveIterator.OfInt iterator(); +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java index 1469e00f..9e6a5cb4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java @@ -4,7 +4,7 @@ import java.util.NoSuchElementException; import java.util.PrimitiveIterator.OfInt; -public final class BitStringSet extends IntegerSet { +public final class BitStringSet extends BaseIntegerSet { static final int MAX_COLLECTION_SIZE = 16384; protected final BitSet bitSet; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 1411e972..3e18d04b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -1,64 +1,15 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.AbstractSet; -import java.util.Collection; import java.util.PrimitiveIterator; +import java.util.Set; -public abstract class IntegerSet extends AbstractSet { - public abstract boolean containsInt(int value); - - @Override - public final boolean contains(Object value) { - if (value instanceof Integer) { - return containsInt((Integer) value); - } - return false; - } - - @Override - public final boolean add(Integer value) { - if (value == null) { - return false; - } - return addInt((Integer) value); - } - - public abstract boolean addInt(int value); - - @Override - public final boolean remove(Object value) { - if (value instanceof Integer) { - return removeInt((Integer) value); - } - return false; - } - - @Override - public boolean removeAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } - - @Override - public boolean retainAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (!c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } +public interface IntegerSet extends Set { + boolean containsInt(int value); + + boolean addInt(int value); - public abstract boolean removeInt(int value); + boolean removeInt(int value); @Override - public abstract PrimitiveIterator.OfInt iterator(); + PrimitiveIterator.OfInt iterator(); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index cab29238..c7943f0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.ArrayList; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index e8b35cd2..58c73f43 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.time.ZonedDateTime; -import java.util.ArrayList; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 112470ce..96f1bd4f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.ArrayList; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index c384204b..40389095 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.ArrayList; import java.util.function.IntSupplier; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 69ef74c9..74d83a38 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.time.ZonedDateTime; -import java.util.ArrayList; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 67206974..65290d9f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.ArrayList; import java.util.function.IntSupplier; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 2597849d..d49f12c6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.ArrayList; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 4dbf778e..ce597107 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.ArrayList; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index b2de58a2..18375d16 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -3,7 +3,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; import java.util.Arrays; -import java.util.BitSet; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 6af3290f..1eb5e0a3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -9,7 +7,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; public class FixedBitfieldEncoderTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 8db9a46c..d7813514 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -3,7 +3,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; import java.util.Arrays; -import java.util.BitSet; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java index 50857c29..7b1e3d10 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java @@ -10,7 +10,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.datatype.encoder.BitStringSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 899dea2d..85852d27 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -142,7 +142,6 @@ public void testDecode2() { Assertions.assertEquals(2, tcfEuV2.getId()); } - @SuppressWarnings("unchecked") @Test public void testDecode3() { TcfEuV2 tcfEuV2 = new TcfEuV2( @@ -245,7 +244,6 @@ public void testDecode3() { Assertions.assertEquals(tcfEuV2.getFieldValue("VendorsDisclosed"), tcfEuV2.getVendorsDisclosed()); } - @SuppressWarnings("unchecked") @Test public void testDecode4() { TcfEuV2 tcfEuV2 = new TcfEuV2( @@ -280,7 +278,6 @@ public void testDecode4() { Assertions.assertEquals(280, ((IntegerSet) tcfEuV2.getFieldValue("VendorLegitimateInterests")).size()); } - @SuppressWarnings("unchecked") @Test public void testDecode5() { TcfEuV2 tcfEuV2 = new TcfEuV2( @@ -349,6 +346,7 @@ public void testDecode6() { tcfEuV2.getFieldValue("VendorLegitimateInterests")); } + @SuppressWarnings("unchecked") @Test public void testDecode7() throws DecodingException { TcfEuV2 tcfEuV2 = new TcfEuV2("COoC-kUOoC-kUAHABAENAwCoAIAAAELAAAwIF5wAoAAgAGAvMACX_ABBAAQAFA"); From caff49f85cd021ec3a28d393a6e49b1ee058f20f Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 1 Apr 2025 16:17:03 -0400 Subject: [PATCH 022/146] move and rename --- .../iab/gpp/encoder/bitstring/BitString.java | 4 +-- .../EncodableFibonacciIntegerRange.java | 4 +-- .../datatype/EncodableFixedBitfield.java | 4 +-- .../datatype/EncodableFixedIntegerRange.java | 4 +-- .../datatype/EncodableFlexibleBitfield.java | 4 +-- .../EncodableOptimizedFixedRange.java | 4 +-- .../encoder/datatype/ManagedIntegerSet.java | 12 +++++++ .../iab/gpp/encoder/datatype/RangeEntry.java | 4 +-- .../datatype/encoder/BaseIntegerSet.java | 11 +++---- .../encoder/FibonacciIntegerRangeEncoder.java | 2 +- .../encoder/FixedIntegerRangeEncoder.java | 2 +- .../{BitStringSet.java => IntegerBitSet.java} | 32 ++++++++++++++----- .../encoder/datatype/encoder/IntegerSet.java | 15 +++++++++ .../OptimizedFibonacciRangeEncoder.java | 2 +- .../encoder/OptimizedFixedRangeEncoder.java | 2 +- .../com/iab/gpp/encoder/GppModelTest.java | 7 ++-- .../FibonacciIntegerRangeEncoderTest.java | 2 +- .../encoder/FixedBitfieldEncoderTest.java | 18 +++++------ .../encoder/FixedIntegerRangeEncoderTest.java | 2 +- 19 files changed, 88 insertions(+), 47 deletions(-) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/{BitStringSet.java => IntegerBitSet.java} (73%) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 74390459..74f05b6e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,7 +1,7 @@ package com.iab.gpp.encoder.bitstring; import java.util.BitSet; -import com.iab.gpp.encoder.datatype.encoder.BitStringSet; +import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -46,7 +46,7 @@ public static final BitString of(String str) { } public IntegerSet toIntegerSet() { - return new BitStringSet(bitSet, from, to); + return new IntegerBitSet(bitSet, from, to); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index f9d7d4e4..a8b08038 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,7 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.BitStringSet; +import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; @@ -15,7 +15,7 @@ public class EncodableFibonacciIntegerRange extends AbstractEncodableBitStringDa public EncodableFibonacciIntegerRange() { super(true); - this.value = new BitStringSet(); + this.value = new IntegerBitSet(); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index e22fe0b5..27415283 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -3,7 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.BitStringSet; +import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -16,7 +16,7 @@ public class EncodableFixedBitfield extends AbstractEncodableBitStringDataType stream(){ + return delegate.stream(); + } + + @Override + public IntStream intStream() { + return delegate.intStream(); + } + @Override public boolean containsInt(int value) { return delegate.containsInt(value); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 8b8fd0a3..10d59c7f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -2,7 +2,7 @@ import java.util.Collection; import java.util.Set; -import com.iab.gpp.encoder.datatype.encoder.BitStringSet; +import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; public class RangeEntry { @@ -14,7 +14,7 @@ public RangeEntry(int key, int type, Set ids) { super(); this.key = key; this.type = type; - this.ids = new BitStringSet(); + this.ids = new IntegerBitSet(); this.ids.addAll(ids); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java index bbdf0c2e..e46a247a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java @@ -3,9 +3,12 @@ import java.util.AbstractSet; import java.util.Collection; import java.util.PrimitiveIterator; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.stream.IntStream; +import java.util.stream.StreamSupport; public abstract class BaseIntegerSet extends AbstractSet implements IntegerSet { - public abstract boolean containsInt(int value); @Override public final boolean contains(Object value) { @@ -23,8 +26,6 @@ public final boolean add(Integer value) { return addInt((Integer) value); } - public abstract boolean addInt(int value); - @Override public final boolean remove(Object value) { if (value instanceof Integer) { @@ -57,8 +58,4 @@ public boolean retainAll(Collection c) { return modified; } - public abstract boolean removeInt(int value); - - @Override - public abstract PrimitiveIterator.OfInt iterator(); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 12696371..47698bc6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -52,7 +52,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - BitStringSet value = new BitStringSet(); + IntegerBitSet value = new IntegerBitSet(); int offset = 0; int startIndex = 12; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index add371e4..b2c897cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -48,7 +48,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - BitStringSet value = new BitStringSet(); + IntegerBitSet value = new IntegerBitSet(); int startIndex = 12; for (int i = 0; i < count; i++) { boolean group = BooleanEncoder.decode(bitString, startIndex, 1); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java similarity index 73% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 9e6a5cb4..83747cb3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BitStringSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -2,35 +2,39 @@ import java.util.BitSet; import java.util.NoSuchElementException; +import java.util.Spliterator; +import java.util.Spliterators; import java.util.PrimitiveIterator.OfInt; +import java.util.stream.IntStream; +import java.util.stream.StreamSupport; -public final class BitStringSet extends BaseIntegerSet { +public final class IntegerBitSet extends BaseIntegerSet { static final int MAX_COLLECTION_SIZE = 16384; protected final BitSet bitSet; protected final int from; protected final int to; - public BitStringSet(BitSet bitSet, int from, int to) { + public IntegerBitSet(BitSet bitSet, int from, int to) { this.bitSet = bitSet; this.from = from; this.to = to; } - public static final BitStringSet withLimit(int limit) { - return new BitStringSet(new BitSet(0), 0, limit); + public static final IntegerBitSet withLimit(int limit) { + return new IntegerBitSet(new BitSet(0), 0, limit); } - public BitStringSet(int size) { + public IntegerBitSet(int size) { this(new BitSet(size), 0, MAX_COLLECTION_SIZE); } - public BitStringSet() { + public IntegerBitSet() { this(0); } - public static final BitStringSet of(int... values) { - BitStringSet out = new BitStringSet(); + public static final IntegerBitSet of(int... values) { + IntegerBitSet out = new IntegerBitSet(); for (int value : values) { out.addInt(value); } @@ -91,6 +95,18 @@ public int nextInt() { }; } + @Override + public Spliterator.OfInt spliterator(){ + return Spliterators.spliteratorUnknownSize( + iterator(), + Spliterator.ORDERED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL); + } + + @Override + public IntStream intStream() { + return StreamSupport.intStream(spliterator(), false); + } + public void addRange(int start, int end) { int realStart = from + start; int realEnd = from + end; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 3e18d04b..f33c9c18 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -1,15 +1,30 @@ package com.iab.gpp.encoder.datatype.encoder; +import java.util.Collection; import java.util.PrimitiveIterator; import java.util.Set; +import java.util.Spliterator; +import java.util.stream.IntStream; public interface IntegerSet extends Set { boolean containsInt(int value); + + default boolean containsAny(Collection c) { + for (Object e : c) { + if (!contains(e)) { + return false; + } + } + String.join(null, null) + return true; + } boolean addInt(int value); boolean removeInt(int value); + IntStream intStream(); + @Override PrimitiveIterator.OfInt iterator(); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index 273a45d1..c164ee0d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -41,7 +41,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { } else { BitString bits = bitString.substring(17); int length = bits.length(); - BitStringSet value = new BitStringSet(length + 1); + IntegerBitSet value = new IntegerBitSet(length + 1); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { value.addInt(i + 1); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 406ed3e1..dbe771b3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -41,7 +41,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { } else { BitString bits = bitString.substring(17); int length = bits.length(); - BitStringSet value = new BitStringSet(length + 1); + IntegerBitSet value = new IntegerBitSet(length + 1); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { value.addInt(i + 1); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index d6096ac7..1d0398ca 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -7,7 +7,7 @@ import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.datatype.encoder.BitStringSet; +import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.field.TcfEuV2Field; @@ -360,9 +360,9 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - BitStringSet.of(1)); + IntegerBitSet.of(1)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, - BitStringSet.of(0,2)); + IntegerBitSet.of(0,2)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.LAST_UPDATED, utcDateTime); @@ -611,6 +611,7 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(2, tcfCaV1Section.getCmpVersion()); Assertions.assertEquals(413, tcfCaV1Section.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1Section.getUseNonStandardStacks()); + Assertions.assertTrue(tcfCaV1Section.getSpecialFeatureExpressConsent().intStream().anyMatch(x -> x== 7)); Assertions.assertEquals(Set.of(6, 7, 8, 9, 10, 11), tcfCaV1Section.getSpecialFeatureExpressConsent()); Assertions diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index 18375d16..b533210e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -44,7 +44,7 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(); + IntegerSet set = new IntegerBitSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FibonacciIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("000000000010001110011011", builder.build().toString()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 1eb5e0a3..26fd1ab1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -13,7 +13,7 @@ public class FixedBitfieldEncoderTest { @Test public void testEncode1() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(); + IntegerSet set = new IntegerBitSet(); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("00", builder.build().toString()); } @@ -21,7 +21,7 @@ public void testEncode1() { @Test public void testEncode2() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(); + IntegerSet set = new IntegerBitSet(); FixedBitfieldEncoder.encode(builder, set, 1); Assertions.assertEquals("0", builder.build().toString()); } @@ -29,7 +29,7 @@ public void testEncode2() { @Test public void testEncode3() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(); + IntegerSet set = new IntegerBitSet(); set.add(0); FixedBitfieldEncoder.encode(builder, set, 1); Assertions.assertEquals("1", builder.build().toString()); @@ -38,7 +38,7 @@ public void testEncode3() { @Test public void testEncode4() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(); + IntegerSet set = new IntegerBitSet(); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("00", builder.build().toString()); } @@ -46,7 +46,7 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(); + IntegerSet set = new IntegerBitSet(); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("01", builder.build().toString()); @@ -55,7 +55,7 @@ public void testEncode5() { @Test public void testEncode6() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(); + IntegerSet set = new IntegerBitSet(); set.addInt(0); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("10", builder.build().toString()); @@ -64,7 +64,7 @@ public void testEncode6() { @Test public void testEncode7() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(); + IntegerSet set = new IntegerBitSet(); set.addInt(0); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); @@ -75,8 +75,8 @@ public void testEncode7() { public void testEncode8() { Assertions.assertThrows(IndexOutOfBoundsException.class, () -> { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(BitStringSet.MAX_COLLECTION_SIZE); - for(int i = 0; i <= BitStringSet.MAX_COLLECTION_SIZE; i++) { + IntegerSet set = new IntegerBitSet(IntegerBitSet.MAX_COLLECTION_SIZE); + for(int i = 0; i <= IntegerBitSet.MAX_COLLECTION_SIZE; i++) { set.addInt(i); } FixedBitfieldEncoder.encode(builder, set, 2); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index d7813514..3fcc83aa 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -46,7 +46,7 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new BitStringSet(); + IntegerSet set = new IntegerBitSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FixedIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", From 62e0b2d1a4fd9643c92a9efff06b270a2ca18cef Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 1 Apr 2025 16:17:23 -0400 Subject: [PATCH 023/146] remove --- .../java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java | 1 - 1 file changed, 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index f33c9c18..be6b4f20 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -15,7 +15,6 @@ default boolean containsAny(Collection c) { return false; } } - String.join(null, null) return true; } From 56a9d68c3f2167600637a5bbb82eb5516e907041 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 1 Apr 2025 16:18:37 -0400 Subject: [PATCH 024/146] cleanup --- .../com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java | 5 ----- .../com/iab/gpp/encoder/datatype/encoder/IntegerSet.java | 1 - 2 files changed, 6 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java index e46a247a..93d5b791 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java @@ -2,11 +2,6 @@ import java.util.AbstractSet; import java.util.Collection; -import java.util.PrimitiveIterator; -import java.util.Spliterator; -import java.util.Spliterators; -import java.util.stream.IntStream; -import java.util.stream.StreamSupport; public abstract class BaseIntegerSet extends AbstractSet implements IntegerSet { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index be6b4f20..bdd9a671 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -3,7 +3,6 @@ import java.util.Collection; import java.util.PrimitiveIterator; import java.util.Set; -import java.util.Spliterator; import java.util.stream.IntStream; public interface IntegerSet extends Set { From 830665dc3122ff291f81cefe84868dc5d305a90f Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 10 Apr 2025 11:38:04 -0400 Subject: [PATCH 025/146] smaller max size --- .../com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 83747cb3..097d312b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -9,7 +9,7 @@ import java.util.stream.StreamSupport; public final class IntegerBitSet extends BaseIntegerSet { - static final int MAX_COLLECTION_SIZE = 16384; + static final int MAX_COLLECTION_SIZE = 8192; protected final BitSet bitSet; protected final int from; From 749fc889067a1161b15c48bfd3969b110408a336 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 10 Apr 2025 11:48:18 -0400 Subject: [PATCH 026/146] sonarqube fixes --- .../gpp/encoder/base64/AbstractBase64UrlEncoder.java | 2 +- .../iab/gpp/encoder/bitstring/BitStringBuilder.java | 12 ++++++------ .../datatype/AbstractEncodableBitStringDataType.java | 6 +----- .../gpp/encoder/datatype/encoder/BaseIntegerSet.java | 2 +- .../gpp/encoder/datatype/encoder/BooleanEncoder.java | 8 +++----- .../encoder/datatype/encoder/DatetimeEncoder.java | 1 + .../datatype/encoder/FibonacciIntegerEncoder.java | 1 + .../encoder/FibonacciIntegerRangeEncoder.java | 3 ++- .../datatype/encoder/FixedBitfieldEncoder.java | 1 + .../datatype/encoder/FixedIntegerEncoder.java | 1 + .../datatype/encoder/FixedIntegerListEncoder.java | 1 + .../datatype/encoder/FixedIntegerRangeEncoder.java | 3 ++- .../encoder/datatype/encoder/FixedLongEncoder.java | 1 + .../encoder/datatype/encoder/FixedStringEncoder.java | 1 + .../gpp/encoder/datatype/encoder/IntegerCache.java | 11 ++++++----- .../encoder/OptimizedFibonacciRangeEncoder.java | 7 ++----- .../section/AbstractLazilyEncodableSection.java | 2 +- .../segment/AbstractLazilyEncodableSegment.java | 4 ++-- 18 files changed, 34 insertions(+), 33 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index f5490a19..eacd934d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -8,7 +8,7 @@ public abstract class AbstractBase64UrlEncoder { - abstract protected void pad(BitStringBuilder bitString); + protected abstract void pad(BitStringBuilder bitString); private static final int BASE64_BITS = 6; /** diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java index 81f22af7..88d0ffaa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java @@ -27,8 +27,8 @@ public BitStringBuilder append(boolean value) { } public BitStringBuilder append(BitString other) { - int length = other.length(); - for (int i = 0; i < length; i++) { + int otherLength = other.length(); + for (int i = 0; i < otherLength; i++) { append(other.getValue(i)); } return this; @@ -38,10 +38,10 @@ public int length() { return length; } - public BitStringBuilder append(BitStringBuilder rangeBitString) { - int length = rangeBitString.length(); - for (int i = 0; i < length; i++) { - append(rangeBitString.bitSet.get(i)); + public BitStringBuilder append(BitStringBuilder other) { + int otherLength = other.length(); + for (int i = 0; i < otherLength; i++) { + append(other.bitSet.get(i)); } return this; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index e899ffe9..15e3f0a6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -41,7 +41,7 @@ public void setValue(Object value) { } else { if (v instanceof Collection) { throw new ValidationException("Invalid value '" - + ((Collection) v).stream().map(i -> i.toString()).collect(Collectors.joining(",")) + "'"); + + ((Collection) v).stream().map(Object::toString).collect(Collectors.joining(",")) + "'"); } else { throw new ValidationException("Invalid value '" + v + "'"); } @@ -53,10 +53,6 @@ public boolean getHardFailIfMissing() { return this.hardFailIfMissing; } - public abstract void encode(BitStringBuilder builder); - - public abstract void decode(BitString bitString); - public abstract BitString substring(BitString bitString, int fromIndex) throws SubstringException; public boolean isDirty() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java index 93d5b791..9f7c6d59 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java @@ -18,7 +18,7 @@ public final boolean add(Integer value) { if (value == null) { return false; } - return addInt((Integer) value); + return addInt(value); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java index ba58b995..8787b4f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java @@ -6,14 +6,12 @@ import com.iab.gpp.encoder.error.EncodingException; public class BooleanEncoder { + private BooleanEncoder() {} public static void encode(BitStringBuilder builder, Boolean value) { - if (value == true) { - builder.append(true); - } else if (value == false) { - builder.append(false); - } else { + if (value == null) { throw new EncodingException("Unencodable Boolean '" + value + "'"); } + builder.append(value); } public static boolean decode(BitString bitString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index c2a520b9..42e500f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -10,6 +10,7 @@ public class DatetimeEncoder { + private DatetimeEncoder() {} public static final ZoneId UTC = ZoneId.of("UTC"); public static void encode(BitStringBuilder builder, ZonedDateTime value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 5f628384..889b8f28 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.error.EncodingException; public class FibonacciIntegerEncoder { + private FibonacciIntegerEncoder() {} // this is the length of the longest fibonacci encoded string of all 1's // which does not overflow a 32-bit integer diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 47698bc6..d33a5d7b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { + private FibonacciIntegerRangeEncoder() {} public static int encode(BitStringBuilder builder, Collection value) { BitStringBuilder rangeBuilder = new BitStringBuilder(); @@ -60,7 +61,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { boolean group = BooleanEncoder.decode(bitString, startIndex, 1); startIndex++; - if (group == true) { + if (group) { int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); int start = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = start; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 4086b0b6..5a59decd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; public class FixedBitfieldEncoder { + private FixedBitfieldEncoder() {} public static void encode(BitStringBuilder builder, IntegerSet value, int bitStringLength) { for (int i = 0; i < bitStringLength; i++) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index 5a8244a8..b1a8b43c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerEncoder { + private FixedIntegerEncoder() {} public static void encode(BitStringBuilder builder, int value, int bitStringLength) { int mask = 1 << bitStringLength; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 9c784a8d..7140af9c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerListEncoder { + private FixedIntegerListEncoder() {} public static void encode(BitStringBuilder builder, List value, int elementBitStringLength, int numElements) { int length = value.size(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index b2c897cb..a92e2b09 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { + private FixedIntegerRangeEncoder() {} public static int encode(BitStringBuilder builder, Collection value) { BitStringBuilder rangeBuilder = new BitStringBuilder(); @@ -54,7 +55,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { boolean group = BooleanEncoder.decode(bitString, startIndex, 1); startIndex++; - if (group == true) { + if (group) { int start = FixedIntegerEncoder.decode(bitString, startIndex, 16); startIndex += 16; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java index 09eb565b..9f0dba27 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.error.EncodingException; public class FixedLongEncoder { + private FixedLongEncoder() {} public static void encode(BitStringBuilder builder, long value, int bitStringLength) { long mask = 1L << bitStringLength; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index d735242e..8c7784d0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.error.EncodingException; public class FixedStringEncoder { + private FixedStringEncoder() {} private static final char SPACE = ' '; public static void encode(BitStringBuilder builder, String value, int stringLength) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java index 719f73e6..d92823e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java @@ -1,17 +1,18 @@ package com.iab.gpp.encoder.datatype.encoder; +import static com.iab.gpp.encoder.datatype.encoder.IntegerBitSet.MAX_COLLECTION_SIZE; + final class IntegerCache { - // should be greater than the greatest vendor id in the global vendor list - private static final int CACHE_SIZE = 8096; - private static final Integer[] CACHE = new Integer[CACHE_SIZE]; + private IntegerCache() {} + private static final Integer[] CACHE = new Integer[MAX_COLLECTION_SIZE]; static { - for (int i = 0; i < CACHE_SIZE; i++) { + for (int i = 0; i < MAX_COLLECTION_SIZE; i++) { CACHE[i] = i; } } static Integer valueOf(int i) { - if (i >=0 && i < CACHE_SIZE) { + if (i >=0 && i < MAX_COLLECTION_SIZE) { return CACHE[i]; } return i; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index c164ee0d..f224db03 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.error.EncodingException; public class OptimizedFibonacciRangeEncoder { + private OptimizedFibonacciRangeEncoder() {} public static void encode(BitStringBuilder builder, IntegerSet value) throws EncodingException { // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way @@ -22,11 +23,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc FixedIntegerEncoder.encode(builder, max, 16); builder.append(false); for (int i = 0; i < max; i++) { - if (value.contains(i + 1)) { - builder.append(true); - } else { - builder.append(false); - } + builder.append(value.contains(i + 1)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 5d6e354d..14ccf77b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -13,7 +13,7 @@ public abstract class AbstractLazilyEncodableSection implements EncodableSection private boolean dirty = false; private boolean decoded = true; - public AbstractLazilyEncodableSection() { + protected AbstractLazilyEncodableSection() { this.segments = initializeSegments(); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 85b154fe..d08ef87c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -25,7 +25,7 @@ public abstract class AbstractLazilyEncodableSegment> implem private boolean decoded = true; - public AbstractLazilyEncodableSegment() { + protected AbstractLazilyEncodableSegment() { this.fields = initializeFields(); } @@ -33,7 +33,7 @@ public AbstractLazilyEncodableSegment() { protected abstract StringBuilder encodeSegment(T fields); - protected abstract void decodeSegment(CharSequence encodedString, T Fields); + protected abstract void decodeSegment(CharSequence encodedString, T fields); public boolean hasField(String fieldName) { return this.fields.containsKey(fieldName); From c72610f5548c7abd2f40e0bcc0f4880c5aacf666 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 10 Apr 2025 11:55:23 -0400 Subject: [PATCH 027/146] trailing whitespace --- .../base64/CompressedBase64UrlEncoder.java | 8 +++--- .../base64/TraditionalBase64UrlEncoder.java | 8 +++--- .../iab/gpp/encoder/bitstring/BitString.java | 2 +- .../encoder/bitstring/BitStringEncoder.java | 8 +++--- .../AbstractEncodableBitStringDataType.java | 4 +-- .../EncodableArrayOfFixedIntegerRanges.java | 2 +- .../datatype/EncodableFixedIntegerRange.java | 2 +- .../encoder/datatype/ManagedFixedList.java | 6 ++--- .../encoder/datatype/ManagedIntegerSet.java | 18 ++++++------- .../datatype/UnencodableCharacter.java | 4 +-- .../encoder/datatype/UnencodableInteger.java | 4 +-- .../datatype/encoder/BaseIntegerSet.java | 12 ++++----- .../datatype/encoder/FixedIntegerEncoder.java | 2 +- .../datatype/encoder/IntegerBitSet.java | 20 +++++++------- .../encoder/datatype/encoder/IntegerSet.java | 6 ++--- .../com/iab/gpp/encoder/field/FieldNames.java | 2 +- .../com/iab/gpp/encoder/field/Fields.java | 8 +++--- .../iab/gpp/encoder/field/HeaderV1Field.java | 2 +- .../iab/gpp/encoder/field/TcfCaV1Field.java | 4 +-- .../iab/gpp/encoder/field/TcfEuV2Field.java | 6 ++--- .../com/iab/gpp/encoder/field/UsCoField.java | 4 +-- .../com/iab/gpp/encoder/field/UsCtField.java | 4 +-- .../com/iab/gpp/encoder/field/UsDeField.java | 4 +-- .../com/iab/gpp/encoder/field/UsIaField.java | 4 +-- .../com/iab/gpp/encoder/field/UsMtField.java | 4 +-- .../com/iab/gpp/encoder/field/UsNatField.java | 2 +- .../com/iab/gpp/encoder/field/UsNeField.java | 4 +-- .../com/iab/gpp/encoder/field/UsNhField.java | 4 +-- .../com/iab/gpp/encoder/field/UsNjField.java | 4 +-- .../com/iab/gpp/encoder/field/UsOrField.java | 4 +-- .../com/iab/gpp/encoder/field/UsTnField.java | 4 +-- .../com/iab/gpp/encoder/field/UsTxField.java | 4 +-- .../AbstractLazilyEncodableSection.java | 14 +++++----- .../gpp/encoder/section/EncodableSection.java | 2 +- .../com/iab/gpp/encoder/section/HeaderV1.java | 14 +++++----- .../com/iab/gpp/encoder/section/TcfCaV1.java | 26 +++++++++---------- .../com/iab/gpp/encoder/section/TcfEuV2.java | 24 ++++++++--------- .../com/iab/gpp/encoder/section/UsCa.java | 14 +++++----- .../com/iab/gpp/encoder/section/UsCo.java | 12 ++++----- .../com/iab/gpp/encoder/section/UsCt.java | 8 +++--- .../com/iab/gpp/encoder/section/UsDe.java | 4 +-- .../com/iab/gpp/encoder/section/UsFl.java | 2 +- .../com/iab/gpp/encoder/section/UsIa.java | 4 +-- .../com/iab/gpp/encoder/section/UsMt.java | 10 +++---- .../com/iab/gpp/encoder/section/UsNat.java | 8 +++--- .../com/iab/gpp/encoder/section/UsNe.java | 8 +++--- .../com/iab/gpp/encoder/section/UsNh.java | 10 +++---- .../com/iab/gpp/encoder/section/UsNj.java | 10 +++---- .../com/iab/gpp/encoder/section/UsOr.java | 10 +++---- .../com/iab/gpp/encoder/section/UsTn.java | 10 +++---- .../com/iab/gpp/encoder/section/UsTx.java | 8 +++--- .../com/iab/gpp/encoder/section/UsUt.java | 14 +++++----- .../com/iab/gpp/encoder/section/UsVa.java | 2 +- .../com/iab/gpp/encoder/section/UspV1.java | 10 +++---- .../AbstractLazilyEncodableSegment.java | 2 +- .../encoder/segment/TcfCaV1CoreSegment.java | 2 +- .../encoder/segment/TcfEuV2CoreSegment.java | 2 +- 57 files changed, 202 insertions(+), 202 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index f943016b..5aef8572 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -5,15 +5,15 @@ public class CompressedBase64UrlEncoder extends AbstractBase64UrlEncoder { private static final CompressedBase64UrlEncoder instance = new CompressedBase64UrlEncoder(); - + private CompressedBase64UrlEncoder() { - + } - + public static CompressedBase64UrlEncoder getInstance() { return instance; } - + @Override protected void pad(BitStringBuilder bitString) { int remainder = bitString.length() % 8; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index 996c4f81..eb2e7a25 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -5,15 +5,15 @@ public class TraditionalBase64UrlEncoder extends AbstractBase64UrlEncoder { private static final TraditionalBase64UrlEncoder instance = new TraditionalBase64UrlEncoder(); - + private TraditionalBase64UrlEncoder() { - + } - + public static TraditionalBase64UrlEncoder getInstance() { return instance; } - + @Override protected void pad(BitStringBuilder bitString) { int remainder = bitString.length() % 24; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 74f05b6e..2b89405d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -44,7 +44,7 @@ public static final BitString of(String str) { } return builder.build(); } - + public IntegerSet toIntegerSet() { return new IntegerBitSet(bitSet, from, to); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java index e2766179..e4548900 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java @@ -10,15 +10,15 @@ public class BitStringEncoder { private static final BitStringEncoder instance = new BitStringEncoder(); - + private BitStringEncoder() { - + } - + public static BitStringEncoder getInstance() { return instance; } - + public BitStringBuilder encode(EncodableBitStringFields fields) { BitStringBuilder bitString = new BitStringBuilder(); List fieldNames = fields.getNames(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 15e3f0a6..510ee752 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -18,12 +18,12 @@ public abstract class AbstractEncodableBitStringDataType implements Encodable protected AbstractEncodableBitStringDataType(boolean hardFailIfMissing) { this.hardFailIfMissing = hardFailIfMissing; } - + public AbstractEncodableBitStringDataType withValidator(Predicate validator) { this.validator = validator; return this; } - + public boolean hasValue() { return this.value != null; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 85bfb4b7..9d39e565 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -16,7 +16,7 @@ public class EncodableArrayOfFixedIntegerRanges extends AbstractEncodableBitStri private int keyBitStringLength; private int typeBitStringLength; - + public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { super(hardFailIfMissing); this.keyBitStringLength = keyBitStringLength; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 201ef0cb..d1358222 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -56,7 +56,7 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - + @Override public IntegerSet getValue() { return new ManagedIntegerSet(this, super.getValue()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java index 3aa9192a..df38f67f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java @@ -4,10 +4,10 @@ import java.util.List; final class ManagedFixedList extends AbstractList { - + private final DataType parent; private final List delegate; - + ManagedFixedList(DataType parent, List delegate) { this.parent = parent; this.delegate = delegate; @@ -31,7 +31,7 @@ public T set(int index, T value) { } return prior; } - + @Override public String toString() { return delegate.toString(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java index b0103481..daccfdb9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java @@ -7,46 +7,46 @@ import com.iab.gpp.encoder.datatype.encoder.IntegerSet; final class ManagedIntegerSet extends BaseIntegerSet { - + private final DataType parent; private final IntegerSet delegate; - + ManagedIntegerSet(DataType parent, IntegerSet delegate) { this.parent = parent; this.delegate = delegate; } - + @Override public void clear() { delegate.clear(); parent.setDirty(true); } - + @Override public boolean isEmpty() { return delegate.isEmpty(); } - + @Override public int size() { return delegate.size(); } - + @Override public PrimitiveIterator.OfInt iterator() { return delegate.iterator(); } - + @Override public Stream stream(){ return delegate.stream(); } - + @Override public IntStream intStream() { return delegate.intStream(); } - + @Override public boolean containsInt(int value) { return delegate.containsInt(value); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 27c5c941..c8f33ffc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -12,7 +12,7 @@ public class UnencodableCharacter implements DataType { public UnencodableCharacter() { this.validator = v -> true; } - + public UnencodableCharacter(Character value) { this.validator = v -> true; setValue(value); @@ -26,7 +26,7 @@ public UnencodableCharacter(Character value, Predicate validator) { public void setValidator(Predicate validator) { this.validator = validator; } - + @Override public boolean hasValue() { return this.value != null; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index 8838e4c4..fdae91f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -12,7 +12,7 @@ public class UnencodableInteger implements DataType { public UnencodableInteger() { this.validator = v -> true; } - + public UnencodableInteger(Integer value) { this.validator = v -> true; setValue(value); @@ -26,7 +26,7 @@ public UnencodableInteger(Integer value, Predicate validator) { public void setValidator(Predicate validator) { this.validator = validator; } - + @Override public boolean hasValue() { return this.value != null; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java index 9f7c6d59..bb872855 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java @@ -4,15 +4,15 @@ import java.util.Collection; public abstract class BaseIntegerSet extends AbstractSet implements IntegerSet { - + @Override public final boolean contains(Object value) { if (value instanceof Integer) { return containsInt((Integer) value); } - return false; + return false; } - + @Override public final boolean add(Integer value) { if (value == null) { @@ -20,7 +20,7 @@ public final boolean add(Integer value) { } return addInt(value); } - + @Override public final boolean remove(Object value) { if (value instanceof Integer) { @@ -28,7 +28,7 @@ public final boolean remove(Object value) { } return false; } - + @Override public boolean removeAll(Collection c) { boolean modified = false; @@ -40,7 +40,7 @@ public boolean removeAll(Collection c) { } return modified; } - + @Override public boolean retainAll(Collection c) { boolean modified = false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index b1a8b43c..6b7105ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -23,7 +23,7 @@ public static void encode(BitStringBuilder builder, int value, int bitStringLeng public static int decode(BitString bitString) throws DecodingException { return decode(bitString, 0, bitString.length()); } - + public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { int value = 0; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 097d312b..132b2628 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -20,15 +20,15 @@ public IntegerBitSet(BitSet bitSet, int from, int to) { this.from = from; this.to = to; } - + public static final IntegerBitSet withLimit(int limit) { return new IntegerBitSet(new BitSet(0), 0, limit); } - + public IntegerBitSet(int size) { this(new BitSet(size), 0, MAX_COLLECTION_SIZE); } - + public IntegerBitSet() { this(0); } @@ -51,12 +51,12 @@ public int size() { } return count; } - + @Override public void clear() { bitSet.clear(from, to); } - + @Override public boolean isEmpty() { return bitSet.nextSetBit(from) == -1; @@ -72,17 +72,17 @@ public boolean containsInt(int value) { public OfInt iterator() { return new OfInt() { int cursor = bitSet.nextSetBit(from); - + @Override public boolean hasNext() { return cursor < to && cursor != -1; } - + @Override public Integer next() { return IntegerCache.valueOf(nextInt()); } - + @Override public int nextInt() { if (!this.hasNext()) { @@ -106,7 +106,7 @@ public Spliterator.OfInt spliterator(){ public IntStream intStream() { return StreamSupport.intStream(spliterator(), false); } - + public void addRange(int start, int end) { int realStart = from + start; int realEnd = from + end; @@ -115,7 +115,7 @@ public void addRange(int start, int end) { } bitSet.set(realStart, realEnd); } - + public boolean addInt(int value) { int offset = from + value; if (offset >= to) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index bdd9a671..bc9aa3f7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -7,7 +7,7 @@ public interface IntegerSet extends Set { boolean containsInt(int value); - + default boolean containsAny(Collection c) { for (Object e : c) { if (!contains(e)) { @@ -20,9 +20,9 @@ default boolean containsAny(Collection c) { boolean addInt(int value); boolean removeInt(int value); - + IntStream intStream(); - + @Override PrimitiveIterator.OfInt iterator(); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 0d87eaab..b62037e6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -18,7 +18,7 @@ public final class FieldNames { this.map.put(names[i], i); } } - + public boolean contains(String name) { return map.containsKey(name); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java index 35e830a9..107b5138 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java @@ -12,23 +12,23 @@ protected Fields(FieldNames fieldNames) { this.fieldNames = fieldNames; this.values = new Object[fieldNames.getNames().size()]; } - + public List getNames() { return fieldNames.getNames(); } - + public boolean containsKey(String key) { Integer index = fieldNames.convertKey(key); return index != null && values[index] != null; } - + public void put(String key, T value) { Integer index = fieldNames.convertKey(key); if (index != null) { values[index] = value; } } - + @SuppressWarnings("unchecked") public T get(int index) { return (T) values[index]; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 22022d2f..bf08a27f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -8,7 +8,7 @@ public class HeaderV1Field { //@formatter:off public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( - HeaderV1Field.ID, + HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS ); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 070bd884..0524f54e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -28,7 +28,7 @@ public class TcfCaV1Field { public static final String DISCLOSED_VENDORS_SEGMENT_TYPE = "DisclosedVendorsSegmentType"; public static final String DISCLOSED_VENDORS = "DisclosedVendors"; - + //@formatter:off public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.VERSION, @@ -60,7 +60,7 @@ public class TcfCaV1Field { TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT ); //@formatter:on - + //@formatter:off public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index afe7d54a..ef0af351 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -55,7 +55,7 @@ public class TcfEuV2Field { TcfEuV2Field.PUBLISHER_RESTRICTIONS ); //@formatter:on - + //@formatter:off public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, @@ -66,14 +66,14 @@ public class TcfEuV2Field { TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS ); //@formatter:on - + //@formatter:off public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED ); //@formatter:on - + //@formatter:off public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 83adb29e..07d71030 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -17,7 +17,7 @@ public class UsCoField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCoField.VERSION, @@ -33,7 +33,7 @@ public class UsCoField { UsCoField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCoField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 705deb7f..0481c1f3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -17,7 +17,7 @@ public class UsCtField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCtField.VERSION, @@ -33,7 +33,7 @@ public class UsCtField { UsCtField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCtField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 1b9e7946..d9314ffc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -18,7 +18,7 @@ public class UsDeField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsDeField.VERSION, @@ -35,7 +35,7 @@ public class UsDeField { UsDeField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsDeField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index f362faff..c99b23e2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -18,7 +18,7 @@ public class UsIaField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsIaField.VERSION, @@ -35,7 +35,7 @@ public class UsIaField { UsIaField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsIaField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 29cae31f..468ef87d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -18,7 +18,7 @@ public class UsMtField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsMtField.VERSION, @@ -35,7 +35,7 @@ public class UsMtField { UsMtField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsMtField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 794a08af..68a2a000 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -43,7 +43,7 @@ public class UsNatField { UsNatField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNatField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index ebf70be4..df83f06a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -18,7 +18,7 @@ public class UsNeField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNeField.VERSION, @@ -35,7 +35,7 @@ public class UsNeField { UsNeField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNeField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 69ea1ff6..f1044579 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -18,7 +18,7 @@ public class UsNhField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNhField.VERSION, @@ -35,7 +35,7 @@ public class UsNhField { UsNhField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNhField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 6c7eab42..9a2db930 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -18,7 +18,7 @@ public class UsNjField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNjField.VERSION, @@ -35,7 +35,7 @@ public class UsNjField { UsNjField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNjField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index d59b7a00..d5989504 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -18,7 +18,7 @@ public class UsOrField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsOrField.VERSION, @@ -35,7 +35,7 @@ public class UsOrField { UsOrField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsOrField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 475ea7f3..f2750582 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -18,7 +18,7 @@ public class UsTnField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsTnField.VERSION, @@ -35,7 +35,7 @@ public class UsTnField { UsTnField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsTnField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 04ff497c..681345be 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -18,7 +18,7 @@ public class UsTxField { public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; public static final String GPC = "Gpc"; - + //@formatter:off public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsTxField.VERSION, @@ -35,7 +35,7 @@ public class UsTxField { UsTxField.MSPA_SERVICE_PROVIDER_MODE ); //@formatter:on - + //@formatter:off public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsTxField.GPC_SEGMENT_TYPE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 14ccf77b..a9834696 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -7,7 +7,7 @@ public abstract class AbstractLazilyEncodableSection implements EncodableSection { protected List segments; - + private CharSequence encodedString = null; private boolean dirty = false; @@ -18,24 +18,24 @@ protected AbstractLazilyEncodableSection() { } protected abstract List initializeSegments(); - + protected abstract CharSequence encodeSection(List segments); protected abstract List decodeSection(CharSequence encodedString); - + public boolean hasField(String fieldName) { if (!this.decoded) { this.segments = this.decodeSection(this.encodedString); this.dirty = false; this.decoded = true; } - + for(EncodableSegment segment : segments) { if (segment.hasField(fieldName)) { return true; } } - + return false; } @@ -76,7 +76,7 @@ public void setFieldValue(String fieldName, Object value) { public String encode() { return encodeCharSequence().toString(); } - + public CharSequence encodeCharSequence() { if (this.encodedString == null || this.encodedString.length() == 0 || this.dirty) { this.encodedString = this.encodeSection(this.segments); @@ -92,5 +92,5 @@ public void decode(CharSequence encodedString) { this.dirty = false; this.decoded = false; } - + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 9ab83eef..a7324eef 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -15,7 +15,7 @@ public interface EncodableSection { void setFieldValue(String fieldName, Object value); String encode(); - + CharSequence encodeCharSequence(); void decode(CharSequence encodedString); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 3e04eff0..3e6faa0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; public class HeaderV1 extends AbstractLazilyEncodableSection { - + public static final int ID = 3; public static final int VERSION = 1; public static final String NAME = "header"; @@ -42,19 +42,19 @@ public int getVersion() { protected List initializeSegments() { return Collections.singletonList(new HeaderV1CoreSegment()); } - + @Override protected List decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + for (int i=0; i i) { segments.get(i).decode(encodedSegments.get(i)); } } } - + return segments; } @@ -67,10 +67,10 @@ protected CharSequence encodeSection(List segments) { return SlicedCharSequence.join('.', encodedSegments); } - + public IntegerSet getSectionsIds() { return (IntegerSet) this.getFieldValue(HeaderV1Field.SECTION_IDS); } - - + + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 9cb9c295..7534e7a9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -16,7 +16,7 @@ import com.iab.gpp.encoder.segment.TcfCaV1PublisherPurposesSegment; public class TcfCaV1 extends AbstractLazilyEncodableSection { - + public static final int ID = 5; public static final int VERSION = 1; public static final String NAME = "tcfcav1"; @@ -49,28 +49,28 @@ public int getVersion() { protected List initializeSegments() { return Arrays.asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); } - + @Override public List decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { - + /** * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. - * + * * A-H = '000' = 0 * I-P = '001' = 1 * Y-Z,a-f = '011' = 3 - * - * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved + * + * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved * for the encoding version which only coincidentally works here because the version value is less than 8. */ - + CharSequence encodedSegment = encodedSegments.get(i); if (encodedSegment.length() > 0) { char firstChar = encodedSegment.charAt(0); - + if(firstChar >= 'A' && firstChar <= 'H') { segments.get(0).decode(encodedSegment); } else if(firstChar >= 'I' && firstChar <= 'P') { @@ -83,7 +83,7 @@ public List decodeSection(CharSequence encodedString) { } } } - + return segments; } @@ -96,7 +96,7 @@ public CharSequence encodeSection(List segments) { if(!this.getDisclosedVendors().isEmpty()) { encodedSegments.add(segments.get(2).encodeCharSequence()); } - + return SlicedCharSequence.join('.', encodedSegments); } @@ -112,7 +112,7 @@ public void setFieldValue(String fieldName, Object value) throws InvalidFieldExc } } - + public ZonedDateTime getCreated() { return (ZonedDateTime) this.getFieldValue(TcfCaV1Field.CREATED); } @@ -173,7 +173,7 @@ public IntegerSet getVendorImpliedConsent() { public List getPubRestrictions() { return (List) this.getFieldValue(TcfCaV1Field.PUB_RESTRICTIONS); } - + public Integer getPubPurposesSegmentType() { return (Integer) this.getFieldValue(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE); } @@ -201,7 +201,7 @@ public IntegerSet getCustomPurposesImpliedConsent() { public Integer getDisclosedVendorsSegmentType() { return (Integer) this.getFieldValue(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE); } - + public IntegerSet getDisclosedVendors() { return (IntegerSet) this.getFieldValue(TcfCaV1Field.DISCLOSED_VENDORS); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 71ea1938..db70c2ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -17,7 +17,7 @@ import com.iab.gpp.encoder.segment.TcfEuV2VendorsDisclosedSegment; public class TcfEuV2 extends AbstractLazilyEncodableSection { - + public static final int ID = 2; public static final int VERSION = 2; public static final String NAME = "tcfeuv2"; @@ -50,29 +50,29 @@ public int getVersion() { protected List initializeSegments() { return Arrays.asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); } - + @Override public List decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { - + /** * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. - * + * * A-H = '000' = 0 * I-P = '001' = 1 * Q-X = '010' = 2 * Y-Z,a-f = '011' = 3 - * - * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved + * + * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved * for the encoding version which only coincidentally works here because the version value is less than 8. */ - + CharSequence encodedSegment = encodedSegments.get(i); if (encodedSegment.length() > 0) { char firstChar = encodedSegment.charAt(0); - + // unfortunately, the segment ordering doesn't match the segment ids if(firstChar >= 'A' && firstChar <= 'H') { segments.get(0).decode(encodedSegment); @@ -88,7 +88,7 @@ public List decodeSection(CharSequence encodedString) { } } } - + return segments; } @@ -129,7 +129,7 @@ public void setFieldValue(String fieldName, Object value) throws InvalidFieldExc } } - + public ZonedDateTime getCreated() { return (ZonedDateTime) this.getFieldValue(TcfEuV2Field.CREATED); } @@ -242,6 +242,6 @@ public Integer getVendorsDisclosedSegmentType() { public IntegerSet getVendorsDisclosed() { return (IntegerSet) this.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED); } - - + + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index bcb7c776..3ab9bbd2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -42,16 +42,16 @@ public int getVersion() { protected List initializeSegments() { return Arrays.asList(new UsCaCoreSegment(), new UsCaGpcSegment()); } - + @Override protected List decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -59,25 +59,25 @@ protected List decodeSection(CharSequence encodedString) { segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); } } - + return segments; } @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } - + public Integer getSaleOptOutNotice() { return (Integer) this.getFieldValue(UsCaField.SALE_OPT_OUT_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index b5dae649..083031a8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -59,25 +59,25 @@ protected List decodeSection(CharSequence encodedString) { segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); } } - + return segments; } @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } - + public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsCoField.SHARING_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index fa7b4e36..9d49656f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -66,14 +66,14 @@ protected List decodeSection(CharSequence encodedString) { @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index a29a069e..d58c75e4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if (encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index c1e4f2a0..6138863b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -46,7 +46,7 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + for (int i = 0; i < segments.size(); i++) { if (encodedSegments.size() > i) { segments.get(i).decode(encodedSegments.get(i)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 186ba6da..70317995 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if (encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 63da84fe..374c885c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -66,14 +66,14 @@ protected List decodeSection(CharSequence encodedString) { @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } @@ -111,7 +111,7 @@ public List getKnownChildSensitiveDataConsents() { public Integer getAdditionalDataProcessingConsent() { return (Integer) this.getFieldValue(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT); } - + public Integer getMspaCoveredTransaction() { return (Integer) this.getFieldValue(UsMtField.MSPA_COVERED_TRANSACTION); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index e3f81d2a..809f2569 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -66,14 +66,14 @@ protected List decodeSection(CharSequence encodedString) { @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index ce9a7373..c63dd0e7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -66,14 +66,14 @@ protected List decodeSection(CharSequence encodedString) { @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 4026c2b0..52fe25d9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -66,14 +66,14 @@ protected List decodeSection(CharSequence encodedString) { @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } @@ -111,7 +111,7 @@ public List getKnownChildSensitiveDataConsents() { public Integer getAdditionalDataProcessingConsent() { return (Integer) this.getFieldValue(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT); } - + public Integer getMspaCoveredTransaction() { return (Integer) this.getFieldValue(UsNhField.MSPA_COVERED_TRANSACTION); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 31f86ca7..85daf00b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -66,14 +66,14 @@ protected List decodeSection(CharSequence encodedString) { @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } @@ -111,7 +111,7 @@ public List getKnownChildSensitiveDataConsents() { public Integer getAdditionalDataProcessingConsent() { return (Integer) this.getFieldValue(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT); } - + public Integer getMspaCoveredTransaction() { return (Integer) this.getFieldValue(UsNjField.MSPA_COVERED_TRANSACTION); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 411c6a8c..63981765 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -66,14 +66,14 @@ protected List decodeSection(CharSequence encodedString) { @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } @@ -111,7 +111,7 @@ public List getKnownChildSensitiveDataConsents() { public Integer getAdditionalDataProcessingConsent() { return (Integer) this.getFieldValue(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT); } - + public Integer getMspaCoveredTransaction() { return (Integer) this.getFieldValue(UsOrField.MSPA_COVERED_TRANSACTION); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 1c7d8624..6b6c2982 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); - + if(encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if(encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -66,14 +66,14 @@ protected List decodeSection(CharSequence encodedString) { @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } @@ -110,7 +110,7 @@ public Integer getKnownChildSensitiveDataConsents() { public Integer getAdditionalDataProcessingConsent() { return (Integer) this.getFieldValue(UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT); } - + public Integer getMspaCoveredTransaction() { return (Integer) this.getFieldValue(UsTnField.MSPA_COVERED_TRANSACTION); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 10304747..a7f4b66e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -47,11 +47,11 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if(encodedString != null && !encodedString.isEmpty()) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + if (encodedSegments.size() > 0) { segments.get(0).decode(encodedSegments.get(0)); } - + if (encodedSegments.size() > 1) { segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); segments.get(1).decode(encodedSegments.get(1)); @@ -66,14 +66,14 @@ protected List decodeSection(CharSequence encodedString) { @Override protected CharSequence encodeSection(List segments) { List encodedSegments = new ArrayList<>(segments.size()); - + if(!segments.isEmpty()) { encodedSegments.add(segments.get(0).encodeCharSequence()); if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { encodedSegments.add(segments.get(1).encodeCharSequence()); } } - + return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 960ea9ab..96d2217b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.UsUtCoreSegment; public class UsUt extends AbstractLazilyEncodableSection { - + public static final int ID = 11; public static final int VERSION = 1; public static final String NAME = "usut"; @@ -41,19 +41,19 @@ public int getVersion() { protected List initializeSegments() { return Collections.singletonList(new UsUtCoreSegment()); } - + @Override protected List decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + for (int i = 0; i < segments.size(); i++) { if (encodedSegments.size() > i) { segments.get(i).decode(encodedSegments.get(i)); } } } - + return segments; } @@ -66,7 +66,7 @@ protected CharSequence encodeSection(List segments) { return SlicedCharSequence.join('.', encodedSegments); } - + public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsUtField.SHARING_NOTICE); } @@ -111,6 +111,6 @@ public Integer getMspaOptOutOptionMode() { public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsUtField.MSPA_SERVICE_PROVIDER_MODE); } - - + + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 71b8d7ea..c144a2d3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -46,7 +46,7 @@ protected List initializeSegments() { protected List decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + for (int i = 0; i < segments.size(); i++) { if (encodedSegments.size() > i) { segments.get(i).decode(encodedSegments.get(i)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index 263e3592..0e1f7f88 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.UspV1CoreSegment; public class UspV1 extends AbstractLazilyEncodableSection { - + public static final int ID = 6; public static final int VERSION = 1; public static final String NAME = "uspv1"; @@ -41,19 +41,19 @@ public int getVersion() { protected List initializeSegments() { return Collections.singletonList(new UspV1CoreSegment()); } - + @Override protected List decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - + for (int i=0; i < segments.size(); i++) { if (encodedSegments.size() > i) { segments.get(i).decode(encodedSegments.get(i)); } } } - + return segments; } @@ -66,7 +66,7 @@ protected CharSequence encodeSection(List segments) { return SlicedCharSequence.join('.', encodedSegments); } - + public Character getNotice() { return (Character) this.getFieldValue(UspV1Field.NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index d08ef87c..deb447bb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -7,7 +7,7 @@ import com.iab.gpp.encoder.field.Fields; public abstract class AbstractLazilyEncodableSegment> implements EncodableSegment { - + protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); protected static final Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 58c73f43..7bf9087d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -35,7 +35,7 @@ public TcfCaV1CoreSegment(String encodedString) { @Override protected EncodableBitStringFields initializeFields() { ZonedDateTime date = ZonedDateTime.now(); - + EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); fields.put(TcfCaV1Field.CREATED, new EncodableDatetime(date)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 74d83a38..0e4d78fb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -35,7 +35,7 @@ public TcfEuV2CoreSegment(String encodedString) { @Override protected EncodableBitStringFields initializeFields() { ZonedDateTime date = ZonedDateTime.now(); - + EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VERSION, new EncodableFixedInteger(6, TcfEuV2.VERSION)); fields.put(TcfEuV2Field.CREATED, new EncodableDatetime(date)); From eb678a4da83911ebc682db6f10a747e43d78891b Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 10 Apr 2025 12:21:20 -0400 Subject: [PATCH 028/146] more sonarqube --- .../gpp/encoder/base64/CompressedBase64UrlEncoder.java | 2 +- .../gpp/encoder/base64/TraditionalBase64UrlEncoder.java | 2 +- .../com/iab/gpp/encoder/bitstring/BitStringEncoder.java | 2 +- .../datatype/AbstractEncodableBitStringDataType.java | 1 - .../datatype/EncodableArrayOfFixedIntegerRanges.java | 2 +- .../com/iab/gpp/encoder/datatype/EncodableBoolean.java | 2 +- .../com/iab/gpp/encoder/datatype/EncodableDatetime.java | 2 +- .../gpp/encoder/datatype/EncodableFibonacciInteger.java | 2 +- .../encoder/datatype/EncodableFibonacciIntegerRange.java | 2 +- .../iab/gpp/encoder/datatype/EncodableFixedBitfield.java | 2 +- .../iab/gpp/encoder/datatype/EncodableFixedInteger.java | 2 +- .../gpp/encoder/datatype/EncodableFixedIntegerList.java | 2 +- .../gpp/encoder/datatype/EncodableFixedIntegerRange.java | 2 +- .../iab/gpp/encoder/datatype/EncodableFixedString.java | 2 +- .../gpp/encoder/datatype/EncodableFlexibleBitfield.java | 2 +- .../datatype/EncodableOptimizedFibonacciRange.java | 2 +- .../encoder/datatype/EncodableOptimizedFixedRange.java | 2 +- .../com/iab/gpp/encoder/datatype/UnencodableBoolean.java | 2 +- .../iab/gpp/encoder/datatype/UnencodableCharacter.java | 2 +- .../com/iab/gpp/encoder/datatype/UnencodableInteger.java | 2 +- .../iab/gpp/encoder/datatype/encoder/IntegerBitSet.java | 8 -------- .../datatype/encoder/OptimizedFixedRangeEncoder.java | 6 +----- .../iab/gpp/encoder/field/EncodableBitStringFields.java | 2 +- .../java/com/iab/gpp/encoder/field/GenericFields.java | 2 +- .../java/com/iab/gpp/encoder/field/HeaderV1Field.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsCaField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsCoField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsCtField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsDeField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsFlField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsIaField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsMtField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsNatField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsNeField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsNhField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsNjField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsOrField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsTnField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsTxField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsUtField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UsVaField.java | 3 ++- .../main/java/com/iab/gpp/encoder/field/UspV1Field.java | 3 ++- .../main/java/com/iab/gpp/encoder/section/Sections.java | 3 ++- .../com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java | 2 +- .../com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java | 2 +- .../encoder/segment/TcfCaV1DisclosedVendorsSegment.java | 2 +- .../encoder/segment/TcfCaV1PublisherPurposesSegment.java | 2 +- .../com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java | 2 +- .../encoder/segment/TcfEuV2PublisherPurposesSegment.java | 2 +- .../gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java | 2 +- .../encoder/segment/TcfEuV2VendorsDisclosedSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java | 5 ++--- .../java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java | 5 ++--- .../java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java | 2 +- .../com/iab/gpp/encoder/segment/UsNatCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java | 5 ++--- .../java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java | 5 ++--- .../java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java | 2 +- .../java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java | 2 +- .../com/iab/gpp/encoder/segment/UspV1CoreSegment.java | 2 +- .../src/test/java/com/iab/gpp/encoder/GppModelTest.java | 5 +++-- 84 files changed, 109 insertions(+), 104 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index 5aef8572..f94ceb3a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; -public class CompressedBase64UrlEncoder extends AbstractBase64UrlEncoder { +public final class CompressedBase64UrlEncoder extends AbstractBase64UrlEncoder { private static final CompressedBase64UrlEncoder instance = new CompressedBase64UrlEncoder(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index eb2e7a25..43c8e866 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; -public class TraditionalBase64UrlEncoder extends AbstractBase64UrlEncoder { +public final class TraditionalBase64UrlEncoder extends AbstractBase64UrlEncoder { private static final TraditionalBase64UrlEncoder instance = new TraditionalBase64UrlEncoder(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java index e4548900..79ce4ef6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java @@ -7,7 +7,7 @@ import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; -public class BitStringEncoder { +public final class BitStringEncoder { private static final BitStringEncoder instance = new BitStringEncoder(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 510ee752..8cb8cdb6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -5,7 +5,6 @@ import java.util.stream.Collectors; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.ValidationException; public abstract class AbstractEncodableBitStringDataType implements EncodableDataType { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 9d39e565..bcc9ff98 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableArrayOfFixedIntegerRanges extends AbstractEncodableBitStringDataType> { +public final class EncodableArrayOfFixedIntegerRanges extends AbstractEncodableBitStringDataType> { private int keyBitStringLength; private int typeBitStringLength; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 1d4a83a8..3c418fd8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -6,7 +6,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableBoolean extends AbstractEncodableBitStringDataType { +public final class EncodableBoolean extends AbstractEncodableBitStringDataType { public EncodableBoolean(Boolean value) { super(true); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 3724400a..8569995e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableDatetime extends AbstractEncodableBitStringDataType { +public final class EncodableDatetime extends AbstractEncodableBitStringDataType { protected EncodableDatetime() { super(true); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index bfee8f8f..c0106dc9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -6,7 +6,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFibonacciInteger extends AbstractEncodableBitStringDataType { +public final class EncodableFibonacciInteger extends AbstractEncodableBitStringDataType { protected EncodableFibonacciInteger() { super(true); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index a8b08038..19963a55 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFibonacciIntegerRange extends AbstractEncodableBitStringDataType { +public final class EncodableFibonacciIntegerRange extends AbstractEncodableBitStringDataType { public EncodableFibonacciIntegerRange() { super(true); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 27415283..6bd07982 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFixedBitfield extends AbstractEncodableBitStringDataType { +public final class EncodableFixedBitfield extends AbstractEncodableBitStringDataType { private final int numElements; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index b7bb452d..d6dc9775 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -6,7 +6,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFixedInteger extends AbstractEncodableBitStringDataType { +public final class EncodableFixedInteger extends AbstractEncodableBitStringDataType { private int bitStringLength; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index d3167acf..3a4db509 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFixedIntegerList extends AbstractEncodableBitStringDataType> { +public final class EncodableFixedIntegerList extends AbstractEncodableBitStringDataType> { private int elementBitStringLength; private int numElements; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index d1358222..7bbbc4a6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -10,7 +10,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFixedIntegerRange extends AbstractEncodableBitStringDataType { +public final class EncodableFixedIntegerRange extends AbstractEncodableBitStringDataType { protected EncodableFixedIntegerRange() { super(true); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index f06b98f9..7221078c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -6,7 +6,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFixedString extends AbstractEncodableBitStringDataType { +public final class EncodableFixedString extends AbstractEncodableBitStringDataType { private int stringLength; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index bab1bac4..46337183 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableFlexibleBitfield extends AbstractEncodableBitStringDataType { +public final class EncodableFlexibleBitfield extends AbstractEncodableBitStringDataType { private IntSupplier getLengthSupplier; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java index 7c8f4b66..1aba7d88 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java @@ -10,7 +10,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public class EncodableOptimizedFibonacciRange extends AbstractEncodableBitStringDataType { +public final class EncodableOptimizedFibonacciRange extends AbstractEncodableBitStringDataType { protected EncodableOptimizedFibonacciRange() { super(true); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 950951c8..a0669607 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.error.EncodingException; -public class EncodableOptimizedFixedRange extends AbstractEncodableBitStringDataType { +public final class EncodableOptimizedFixedRange extends AbstractEncodableBitStringDataType { public EncodableOptimizedFixedRange() { super(true); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 0240c9a8..3284a23b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -3,7 +3,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -public class UnencodableBoolean extends AbstractEncodableBitStringDataType { +public final class UnencodableBoolean extends AbstractEncodableBitStringDataType { protected UnencodableBoolean() { super(true); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index c8f33ffc..4b1f84ee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -3,7 +3,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.error.ValidationException; -public class UnencodableCharacter implements DataType { +public final class UnencodableCharacter implements DataType { private boolean dirty = false; private Predicate validator; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index fdae91f9..1b40a247 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -3,7 +3,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.error.ValidationException; -public class UnencodableInteger implements DataType { +public final class UnencodableInteger implements DataType { private boolean dirty; private Predicate validator; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 132b2628..cb5d67f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -33,14 +33,6 @@ public IntegerBitSet() { this(0); } - public static final IntegerBitSet of(int... values) { - IntegerBitSet out = new IntegerBitSet(); - for (int value : values) { - out.addInt(value); - } - return out; - } - @Override public int size() { OfInt it = iterator(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index dbe771b3..cc4b7a7a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -22,11 +22,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc FixedIntegerEncoder.encode(builder, max, 16); builder.append(false); for (int i = 0; i < max; i++) { - if (value.containsInt(i + 1)) { - builder.append(true); - } else { - builder.append(false); - } + builder.append(value.containsInt(i + 1)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java index f4286505..e90c6f2e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; -public class EncodableBitStringFields extends Fields> { +public final class EncodableBitStringFields extends Fields> { public EncodableBitStringFields(FieldNames fieldNames) { super(fieldNames); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java index 078b5116..c644f333 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.DataType; -public class GenericFields extends Fields> { +public final class GenericFields extends Fields> { public GenericFields(FieldNames fieldNames) { super(fieldNames); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index bf08a27f..82c390aa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class HeaderV1Field { +public final class HeaderV1Field { + private HeaderV1Field() {} public static final String ID = "Id"; public static final String VERSION = "Version"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 0524f54e..3f6026b9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class TcfCaV1Field { +public final class TcfCaV1Field { + private TcfCaV1Field() {} public static final String VERSION = "Version"; public static final String CREATED = "Created"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index ef0af351..3fa0df6d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class TcfEuV2Field { +public final class TcfEuV2Field { + private TcfEuV2Field() {} public static final String VERSION = "Version"; public static final String CREATED = "Created"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index e7405170..3b5ef779 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsCaField { +public final class UsCaField { + private UsCaField() {} public static final String VERSION = "Version"; public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 07d71030..516c32a8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsCoField { +public final class UsCoField { + private UsCoField() {} public static final String VERSION = "Version"; public static final String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 0481c1f3..56700df9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsCtField { +public final class UsCtField { + private UsCtField() {} public static final String VERSION = "Version"; public static final String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index d9314ffc..7e52bcaf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsDeField { +public final class UsDeField { + private UsDeField() {} public static final String VERSION = "Version"; public static final String PROCESSING_NOTICE = "ProcessingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index aab9c6fb..ae50962c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsFlField { +public final class UsFlField { + private UsFlField() {} public static final String VERSION = "Version"; public static final String PROCESSING_NOTICE = "ProcessingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index c99b23e2..90d2662a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsIaField { +public final class UsIaField { + private UsIaField() {} public static final String VERSION = "Version"; public static final String PROCESSING_NOTICE = "ProcessingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 468ef87d..f3946b6f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsMtField { +public final class UsMtField { + private UsMtField() {} public static final String VERSION = "Version"; public static final String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 68a2a000..d43cb586 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsNatField { +public final class UsNatField { + private UsNatField() {} public static final String VERSION = "Version"; public static final String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index df83f06a..93a99130 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsNeField { +public final class UsNeField { + private UsNeField() {} public static final String VERSION = "Version"; public static final String PROCESSING_NOTICE = "ProcessingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index f1044579..44b99fbe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsNhField { +public final class UsNhField { + private UsNhField() {} public static final String VERSION = "Version"; public static final String PROCESSING_NOTICE = "ProcessingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 9a2db930..1ef95e28 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsNjField { +public final class UsNjField { + private UsNjField() {} public static final String VERSION = "Version"; public static final String PROCESSING_NOTICE = "ProcessingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index d5989504..adf05255 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsOrField { +public final class UsOrField { + private UsOrField() {} public static final String VERSION = "Version"; public static final String PROCESSING_NOTICE = "ProcessingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index f2750582..4271199e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsTnField { +public final class UsTnField { + private UsTnField() {} public static final String VERSION = "Version"; public static final String PROCESSING_NOTICE = "ProcessingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 681345be..5729593a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsTxField { +public final class UsTxField { + private UsTxField() {} public static final String VERSION = "Version"; public static final String PROCESSING_NOTICE = "ProcessingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 2670178a..4cc9ff47 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsUtField { +public final class UsUtField { + private UsUtField() {} public static final String VERSION = "Version"; public static final String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index fd0df4c9..dd9e75cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UsVaField { +public final class UsVaField { + private UsVaField() {} public static final String VERSION = "Version"; public static final String SHARING_NOTICE = "SharingNotice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index 07da31d3..9b497991 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.field; -public class UspV1Field { +public final class UspV1Field { + private UspV1Field() {} public static final String VERSION = "Version"; public static final String NOTICE = "Notice"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java index 3c280cc9..a438d217 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java @@ -6,7 +6,8 @@ import java.util.Map; import java.util.stream.Collectors; -public class Sections { +public final class Sections { + private Sections() {} public static final List SECTION_ORDER; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index c7943f0c..adea375e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.HeaderV1; -public class HeaderV1CoreSegment extends AbstractLazilyEncodableSegment { +public final class HeaderV1CoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 7bf9087d..f5c5b9a8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -18,7 +18,7 @@ import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.section.TcfCaV1; -public class TcfCaV1CoreSegment extends AbstractLazilyEncodableSegment { +public final class TcfCaV1CoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 96f1bd4f..7d1f83a9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public class TcfCaV1DisclosedVendorsSegment extends AbstractLazilyEncodableSegment { +public final class TcfCaV1DisclosedVendorsSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 40389095..0424bb5d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public class TcfCaV1PublisherPurposesSegment extends AbstractLazilyEncodableSegment { +public final class TcfCaV1PublisherPurposesSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 0e4d78fb..134e93b5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -18,7 +18,7 @@ import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.section.TcfEuV2; -public class TcfEuV2CoreSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2CoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 65290d9f..69135848 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public class TcfEuV2PublisherPurposesSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2PublisherPurposesSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index d49f12c6..9bd9a7c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public class TcfEuV2VendorsAllowedSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2VendorsAllowedSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index ce597107..4db588ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public class TcfEuV2VendorsDisclosedSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2VendorsDisclosedSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index e2011d4e..eafc1f12 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.section.UsCa; -public class UsCaCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsCaCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 452011cf..ed72554c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCaField; -public class UsCaGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsCaGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 63086cc5..98e96fc9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.section.UsCo; -public class UsCoCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsCoCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index e1dc7df4..509e8aaf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCoField; -public class UsCoGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsCoGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index a10467c3..d6e27686 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.section.UsCt; -public class UsCtCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsCtCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index b460e1bb..b15c2ab5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCtField; -public class UsCtGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsCtGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 52276afa..534fbf28 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -11,10 +11,9 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsDeField; -import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.section.UsDe; -public class UsDeCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsDeCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); @@ -45,7 +44,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsDeField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0)) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + fields.put(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0)) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 5cd5126a..6978a358 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsDeField; -public class UsDeGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsDeGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index b2eb2f92..384d34ac 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.section.UsFl; -public class UsFlCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsFlCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index f9f4771f..530ccd13 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -11,10 +11,9 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsIaField; -import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.section.UsIa; -public class UsIaCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsIaCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); @@ -47,7 +46,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsIaField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + fields.put(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsIaField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 93454f53..02a9eb1e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsIaField; -public class UsIaGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsIaGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index df14b3f5..49d8813b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.section.UsMt; -public class UsMtCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsMtCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 7c4d4bdb..60c2e3b9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsMtField; -public class UsMtGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsMtGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 4d454838..aefca68a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.section.UsNat; -public class UsNatCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNatCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 79090709..5d0771a3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNatField; -public class UsNatGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNatGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index 988997b5..fb7b77a1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -11,10 +11,9 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNeField; -import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.section.UsNe; -public class UsNeCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNeCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); @@ -45,7 +44,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsNeField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + fields.put(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 41b64300..16b3e688 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNeField; -public class UsNeGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNeGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 3f3a3189..789f86b5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.section.UsNh; -public class UsNhCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNhCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 59a0443c..1343c79e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNhField; -public class UsNhGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNhGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index a835b00a..99f94205 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.section.UsNj; -public class UsNjCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNjCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index df30d565..e5b14d7e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNjField; -public class UsNjGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNjGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index 552b7229..f9ef489d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsOrField; import com.iab.gpp.encoder.section.UsOr; -public class UsOrCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsOrCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 060bf72e..087a6d3d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsOrField; -public class UsOrGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsOrGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index 3e4bee79..b6bd3409 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.section.UsTn; -public class UsTnCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsTnCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index a469ec57..6abd1a4f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTnField; -public class UsTnGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsTnGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 37a80da5..2b809263 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -11,10 +11,9 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTxField; -import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.section.UsTx; -public class UsTxCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsTxCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); @@ -45,7 +44,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsTxField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + fields.put(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index 54058df5..33626df8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -12,7 +12,7 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTxField; -public class UsTxGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsTxGpcSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index fa080485..368cfca5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.section.UsUt; -public class UsUtCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsUtCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index dce50cd5..b374520b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.section.UsVa; -public class UsVaCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsVaCoreSegment extends AbstractLazilyEncodableSegment { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index e37fa0e2..0dce8a33 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -7,7 +7,7 @@ import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.section.UspV1; -public class UspV1CoreSegment extends AbstractLazilyEncodableSegment { +public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment { public UspV1CoreSegment() { super(); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 1d0398ca..fef58a7f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -4,6 +4,7 @@ import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -360,9 +361,9 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - IntegerBitSet.of(1)); + List.of(1)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, - IntegerBitSet.of(0,2)); + List.of(0,2)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.LAST_UPDATED, utcDateTime); From 41330b7b0ebe2c5ae3cedc1d623ffc2e5fc085c9 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 10 Apr 2025 13:26:20 -0400 Subject: [PATCH 029/146] log when exceeding IntegerBitSet.MAX_COLLECTION_SIZE --- .../datatype/encoder/IntegerBitSet.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index cb5d67f5..1493c7b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -4,11 +4,14 @@ import java.util.NoSuchElementException; import java.util.Spliterator; import java.util.Spliterators; +import java.util.logging.Logger; import java.util.PrimitiveIterator.OfInt; import java.util.stream.IntStream; import java.util.stream.StreamSupport; public final class IntegerBitSet extends BaseIntegerSet { + private static final Logger LOGGER = Logger.getLogger(IntegerBitSet.class.getName()); + static final int MAX_COLLECTION_SIZE = 8192; protected final BitSet bitSet; @@ -98,12 +101,21 @@ public Spliterator.OfInt spliterator(){ public IntStream intStream() { return StreamSupport.intStream(spliterator(), false); } + + private static final void logOutOfRange(int value) { + LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: "+ value); + } public void addRange(int start, int end) { int realStart = from + start; int realEnd = from + end; - if (realStart >= to || realEnd > to) { - throw new IndexOutOfBoundsException(); + if (realStart >= to) { + logOutOfRange(start); + return; + } + if (realEnd > to) { + logOutOfRange(end); + realEnd = to; } bitSet.set(realStart, realEnd); } @@ -111,7 +123,8 @@ public void addRange(int start, int end) { public boolean addInt(int value) { int offset = from + value; if (offset >= to) { - throw new IndexOutOfBoundsException(); + logOutOfRange(value); + return false; } boolean present = bitSet.get(offset); if (present) { @@ -124,7 +137,8 @@ public boolean addInt(int value) { public boolean removeInt(int value) { int offset = from + value; if (offset >= to) { - throw new IndexOutOfBoundsException(); + logOutOfRange(value); + return false; } boolean present = bitSet.get(offset); if (!present) { From 485a5b24b1fc2117017136228af82dc3371bb3dd Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 10 Apr 2025 13:29:19 -0400 Subject: [PATCH 030/146] validation --- .../com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 1493c7b8..7122183e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -101,12 +101,15 @@ public Spliterator.OfInt spliterator(){ public IntStream intStream() { return StreamSupport.intStream(spliterator(), false); } - + private static final void logOutOfRange(int value) { LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: "+ value); } public void addRange(int start, int end) { + if (end < start) { + throw new IllegalArgumentException("Negative length range"); + } int realStart = from + start; int realEnd = from + end; if (realStart >= to) { From ab84b325709bcfc2ce4daa6c4cd352e58bdf21cc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 10 Apr 2025 15:27:49 -0400 Subject: [PATCH 031/146] CharSequence.isEmpty() --- .../src/main/java/com/iab/gpp/encoder/section/UsDe.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/UsFl.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/UsIa.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/UsMt.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/UsNe.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/UsNh.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/UsNj.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/UsOr.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/UsTn.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/UsTx.java | 2 +- .../main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index d58c75e4..52664417 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -45,7 +45,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if (encodedString != null && !encodedString.isEmpty()) { + if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 6138863b..6e6fd6b5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -44,7 +44,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if(encodedString != null && !encodedString.isEmpty()) { + if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < segments.size(); i++) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 70317995..37e5cb53 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -45,7 +45,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if (encodedString != null && !encodedString.isEmpty()) { + if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 374c885c..03dea7c1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -45,7 +45,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if(encodedString != null && !encodedString.isEmpty()) { + if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index c63dd0e7..36e9ff8b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -45,7 +45,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if(encodedString != null && !encodedString.isEmpty()) { + if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 52fe25d9..b2f22d81 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -45,7 +45,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if(encodedString != null && !encodedString.isEmpty()) { + if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 85daf00b..b694d403 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -45,7 +45,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if(encodedString != null && !encodedString.isEmpty()) { + if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 63981765..3e14ca1a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -45,7 +45,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if(encodedString != null && !encodedString.isEmpty()) { + if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 6b6c2982..894f9ed9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -45,7 +45,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if(encodedString != null && !encodedString.isEmpty()) { + if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); if(encodedSegments.size() > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index a7f4b66e..0feec120 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -45,7 +45,7 @@ protected List initializeSegments() { @Override protected List decodeSection(CharSequence encodedString) { - if(encodedString != null && !encodedString.isEmpty()) { + if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index 6abd1a4f..12c5aab3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -43,7 +43,7 @@ protected StringBuilder encodeSegment(EncodableBitStringFields fields) { @Override protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { + if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { From 2d8d3307a235e71a617ed8b53170e1c98ac90278 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 10 Apr 2025 15:41:33 -0400 Subject: [PATCH 032/146] fix tests --- .../encoder/FixedBitfieldEncoderTest.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 26fd1ab1..973b4431 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -73,16 +73,20 @@ public void testEncode7() { @Test public void testEncode8() { - Assertions.assertThrows(IndexOutOfBoundsException.class, () -> { - BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(IntegerBitSet.MAX_COLLECTION_SIZE); - for(int i = 0; i <= IntegerBitSet.MAX_COLLECTION_SIZE; i++) { - set.addInt(i); - } - FixedBitfieldEncoder.encode(builder, set, 2); - }); - } - + IntegerSet set = IntegerBitSet.withLimit(5); + for(int i = 0; i <= 10; i++) { + set.addInt(i); + } + Assertions.assertEquals(Set.of(0,1,2,3,4), set); + } + + @Test + public void testEncode9() { + IntegerBitSet set = IntegerBitSet.withLimit(5); + set.addRange(0,10); + Assertions.assertEquals(Set.of(0,1,2,3,4), set); + } + @Test public void testDecode1() { Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of(""))); From 2488a16f208b7d746ee10255f5ae65a8f238ba89 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 14 Apr 2025 14:00:41 -0400 Subject: [PATCH 033/146] fix tests --- .../com/iab/gpp/encoder/GppModelTest.java | 16 +++++++------- .../encoder/FixedBitfieldEncoderTest.java | 8 +++---- .../iab/gpp/encoder/section/TcfCaV1Test.java | 14 ++++++------ .../iab/gpp/encoder/section/TcfEuV2Test.java | 22 +++++++++---------- 4 files changed, 30 insertions(+), 30 deletions(-) diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index fef58a7f..2daa2321 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -613,29 +613,29 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(413, tcfCaV1Section.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1Section.getUseNonStandardStacks()); Assertions.assertTrue(tcfCaV1Section.getSpecialFeatureExpressConsent().intStream().anyMatch(x -> x== 7)); - Assertions.assertEquals(Set.of(6, 7, 8, 9, 10, 11), + Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12), tcfCaV1Section.getSpecialFeatureExpressConsent()); Assertions .assertEquals( - Set.of(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17), + Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), tcfCaV1Section.getPurposesExpressConsent()); Assertions .assertEquals( - Set.of(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23), + Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), tcfCaV1Section.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(12, 24, 48), tcfCaV1Section.getVendorExpressConsent()); Assertions.assertEquals(Set.of(18, 30), tcfCaV1Section.getVendorImpliedConsent()); Assertions .assertEquals( - Set.of(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20), + Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), tcfCaV1Section.getPubPurposesExpressConsent()); Assertions .assertEquals( - Set.of(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23), + Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), tcfCaV1Section.getPubPurposesImpliedConsent()); Assertions.assertEquals(3, tcfCaV1Section.getNumCustomPurposes()); - Assertions.assertEquals(Set.of(1), tcfCaV1Section.getCustomPurposesExpressConsent()); - Assertions.assertEquals(Set.of(0,2), tcfCaV1Section.getCustomPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(2), tcfCaV1Section.getCustomPurposesExpressConsent()); + Assertions.assertEquals(Set.of(1, 3), tcfCaV1Section.getCustomPurposesImpliedConsent()); Assertions.assertEquals(utcDateTime, tcfCaV1Section.getCreated()); Assertions.assertEquals(utcDateTime, tcfCaV1Section.getLastUpdated()); @@ -766,7 +766,7 @@ public void testConsistency() { GppModel decodedModel = new GppModel(fromObjectModel.encode()); Assertions.assertEquals( - Set.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals(Set.of(21, 32, 81, 128, 173, 210, 238, 755), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 973b4431..5fd0735d 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -99,7 +99,7 @@ public void testDecode2() { @Test public void testDecode3() { - Assertions.assertEquals(Set.of(0), FixedBitfieldEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(Set.of(1), FixedBitfieldEncoder.decode(BitString.of("1"))); } @Test @@ -109,17 +109,17 @@ public void testDecode4() { @Test public void testDecode5() { - Assertions.assertEquals(Set.of(1), FixedBitfieldEncoder.decode(BitString.of("01"))); + Assertions.assertEquals(Set.of(2), FixedBitfieldEncoder.decode(BitString.of("01"))); } @Test public void testDecode6() { - Assertions.assertEquals(Set.of(0), FixedBitfieldEncoder.decode(BitString.of("10"))); + Assertions.assertEquals(Set.of(1), FixedBitfieldEncoder.decode(BitString.of("10"))); } @Test public void testDecode7() { - Assertions.assertEquals(Set.of(0, 1), FixedBitfieldEncoder.decode(BitString.of("11"))); + Assertions.assertEquals(Set.of(1, 2), FixedBitfieldEncoder.decode(BitString.of("11"))); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java index 7b1e3d10..e3760265 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java @@ -128,25 +128,25 @@ public void testDecode2() { Assertions.assertEquals(2, tcfCaV1.getCmpVersion()); Assertions.assertEquals(413, tcfCaV1.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1.getUseNonStandardStacks()); - Assertions.assertEquals(Set.of(6, 7, 8, 9, 10, 11), + Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12), tcfCaV1.getSpecialFeatureExpressConsent()); - Assertions.assertEquals(Set.of(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17), + Assertions.assertEquals(Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), tcfCaV1.getPurposesExpressConsent()); - Assertions.assertEquals(Set.of(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23), + Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), tcfCaV1.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(12, 24, 48), tcfCaV1.getVendorExpressConsent()); Assertions.assertEquals(Set.of(18, 30), tcfCaV1.getVendorImpliedConsent()); Assertions .assertEquals( - Set.of(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20), + Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), tcfCaV1.getPubPurposesExpressConsent()); Assertions .assertEquals( - Set.of(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23), + Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), tcfCaV1.getPubPurposesImpliedConsent()); Assertions.assertEquals(3, tcfCaV1.getNumCustomPurposes()); - Assertions.assertEquals(Set.of(1), tcfCaV1.getCustomPurposesExpressConsent()); - Assertions.assertEquals(Set.of(0, 2), tcfCaV1.getCustomPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(2), tcfCaV1.getCustomPurposesExpressConsent()); + Assertions.assertEquals(Set.of(1, 3), tcfCaV1.getCustomPurposesImpliedConsent()); Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getCreated()); Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getLastUpdated()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 85852d27..fe049381 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -260,14 +260,14 @@ public void testDecode4() { Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); Assertions.assertEquals( - Set.of(0), + Set.of(1), tcfEuV2.getFieldValue("SpecialFeatureOptins")); Assertions .assertEquals( - Set.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue("PurposeConsents")); Assertions.assertEquals( - Set.of(1, 5, 6, 7, 8, 9), + Set.of(2, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue("PurposeLegitimateInterests")); Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); @@ -294,14 +294,14 @@ public void testDecode5() { Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); Assertions.assertEquals( - Set.of(0), + Set.of(1), tcfEuV2.getFieldValue("SpecialFeatureOptins")); Assertions .assertEquals( - Set.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue("PurposeConsents")); Assertions.assertEquals( - Set.of(1, 5, 6, 7, 8, 9), + Set.of(2, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue("PurposeLegitimateInterests")); Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); @@ -331,10 +331,10 @@ public void testDecode6() { tcfEuV2.getFieldValue("SpecialFeatureOptins")); Assertions .assertEquals( - Set.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue("PurposeConsents")); Assertions.assertEquals( - Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9), + Set.of(2, 3, 4, 5, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue("PurposeLegitimateInterests")); Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); @@ -364,13 +364,13 @@ public void testDecode7() throws DecodingException { Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); Assertions.assertEquals( - Set.of(0), + Set.of(1), tcfEuV2.getFieldValue("SpecialFeatureOptins")); Assertions.assertEquals( - Set.of(0), + Set.of(1), tcfEuV2.getFieldValue("PurposeConsents")); Assertions.assertEquals( - Set.of(1, 6, 8, 9), + Set.of(2, 7, 9, 10), tcfEuV2.getFieldValue("PurposeLegitimateInterests")); Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); From 26136408581f808754bed2e8925b5b806b99044c Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 14 Apr 2025 14:30:52 -0400 Subject: [PATCH 034/146] clean up fixed bitfields --- .../iab/gpp/encoder/bitstring/BitString.java | 5 ++- .../datatype/EncodableFixedBitfield.java | 2 +- .../datatype/encoder/IntegerBitSet.java | 34 +++++++++++-------- .../OptimizedFibonacciRangeEncoder.java | 2 +- .../encoder/OptimizedFixedRangeEncoder.java | 2 +- .../encoder/FixedBitfieldEncoderTest.java | 4 +-- 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 2b89405d..6c421df0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,6 +1,9 @@ package com.iab.gpp.encoder.bitstring; import java.util.BitSet; +import java.util.PrimitiveIterator.OfInt; +import java.util.stream.IntStream; +import com.iab.gpp.encoder.datatype.encoder.BaseIntegerSet; import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -46,7 +49,7 @@ public static final BitString of(String str) { } public IntegerSet toIntegerSet() { - return new IntegerBitSet(bitSet, from, to); + return new IntegerBitSet(bitSet, from, to, 1); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 6bd07982..e7404069 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -16,7 +16,7 @@ public final class EncodableFixedBitfield extends AbstractEncodableBitStringData public EncodableFixedBitfield(int numElements) { super(true); this.numElements = numElements; - this.value = IntegerBitSet.withLimit(numElements); + this.value = new IntegerBitSet(numElements); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 7122183e..9f35c4f8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -17,23 +17,21 @@ public final class IntegerBitSet extends BaseIntegerSet { protected final BitSet bitSet; protected final int from; protected final int to; + private final int adjustment; - public IntegerBitSet(BitSet bitSet, int from, int to) { + public IntegerBitSet(BitSet bitSet, int from, int to, int adjustment) { this.bitSet = bitSet; this.from = from; this.to = to; + this.adjustment = adjustment; } - public static final IntegerBitSet withLimit(int limit) { - return new IntegerBitSet(new BitSet(0), 0, limit); - } - - public IntegerBitSet(int size) { - this(new BitSet(size), 0, MAX_COLLECTION_SIZE); + public IntegerBitSet(int limit) { + this(new BitSet(0), 0, limit, 0); } public IntegerBitSet() { - this(0); + this(MAX_COLLECTION_SIZE); } @Override @@ -47,6 +45,14 @@ public int size() { return count; } + private int getOffset(int value) { + int offset = from - adjustment + value; + if (offset < from) { + throw new IndexOutOfBoundsException(); + } + return offset; + } + @Override public void clear() { bitSet.clear(from, to); @@ -59,7 +65,7 @@ public boolean isEmpty() { @Override public boolean containsInt(int value) { - int offset = from + value; + int offset = getOffset(value); return offset < to && bitSet.get(offset); } @@ -85,7 +91,7 @@ public int nextInt() { } int next = cursor; cursor = bitSet.nextSetBit(cursor + 1); - return next - from; + return next - from + adjustment; } }; } @@ -110,8 +116,8 @@ public void addRange(int start, int end) { if (end < start) { throw new IllegalArgumentException("Negative length range"); } - int realStart = from + start; - int realEnd = from + end; + int realStart = getOffset(start); + int realEnd = getOffset(end); if (realStart >= to) { logOutOfRange(start); return; @@ -124,7 +130,7 @@ public void addRange(int start, int end) { } public boolean addInt(int value) { - int offset = from + value; + int offset = getOffset(value); if (offset >= to) { logOutOfRange(value); return false; @@ -138,7 +144,7 @@ public boolean addInt(int value) { } public boolean removeInt(int value) { - int offset = from + value; + int offset = getOffset(value); if (offset >= to) { logOutOfRange(value); return false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index f224db03..66160efd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -38,7 +38,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { } else { BitString bits = bitString.substring(17); int length = bits.length(); - IntegerBitSet value = new IntegerBitSet(length + 1); + IntegerBitSet value = new IntegerBitSet(); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { value.addInt(i + 1); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index cc4b7a7a..5a5660f8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -37,7 +37,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { } else { BitString bits = bitString.substring(17); int length = bits.length(); - IntegerBitSet value = new IntegerBitSet(length + 1); + IntegerBitSet value = new IntegerBitSet(); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { value.addInt(i + 1); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 5fd0735d..a0549270 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -73,7 +73,7 @@ public void testEncode7() { @Test public void testEncode8() { - IntegerSet set = IntegerBitSet.withLimit(5); + IntegerSet set = new IntegerBitSet(5); for(int i = 0; i <= 10; i++) { set.addInt(i); } @@ -82,7 +82,7 @@ public void testEncode8() { @Test public void testEncode9() { - IntegerBitSet set = IntegerBitSet.withLimit(5); + IntegerBitSet set = new IntegerBitSet(5); set.addRange(0,10); Assertions.assertEquals(Set.of(0,1,2,3,4), set); } From 724001893f010ba9c91773ae054b07ca9e56f6db Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 14 Apr 2025 16:04:32 -0400 Subject: [PATCH 035/146] add rudimentary toString implementations --- .../src/main/java/com/iab/gpp/encoder/GppModel.java | 9 +++++++++ .../section/AbstractLazilyEncodableSection.java | 10 ++++++++++ .../segment/AbstractLazilyEncodableSegment.java | 11 +++++++++++ 3 files changed, 30 insertions(+) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 8b097970..6aa7d423 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -472,5 +472,14 @@ public void decode(String encodedString) { this.decoded = false; } + public String toString() { + List sectionIds = getSectionIds(); + List pieces = new ArrayList<>(sectionIds.size()); + for (Integer sectionId : sectionIds) { + pieces.add(getSection(sectionId).toString()); + } + return pieces.toString(); + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index a9834696..df8b9a33 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.List; +import javax.swing.plaf.synth.SynthProgressBarUI; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -93,4 +94,13 @@ public void decode(CharSequence encodedString) { this.decoded = false; } + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); + for (EncodableSegment segment: segments) { + sb.append(", ").append(segment.toString()); + } + sb.append('}'); + return sb.toString(); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index deb447bb..9e07c18e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -85,5 +85,16 @@ public void decode(CharSequence encodedString) { this.decoded = false; } + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("{name=").append(getClass().getSimpleName()); + for (String field : fields.getNames()) { + if (hasField(field)) { + sb.append(", ").append(field).append('=').append(getFieldValue(field)); + } + } + sb.append('}'); + return sb.toString(); + } } From 4d7c38ccb9de453eccbf55bd557d037f6df09cd4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 14 Apr 2025 16:35:44 -0400 Subject: [PATCH 036/146] use lightweight Instant --- .../iab/gpp/encoder/bitstring/BitString.java | 3 --- .../encoder/datatype/EncodableDatetime.java | 6 ++--- .../datatype/encoder/DatetimeEncoder.java | 11 ++++----- .../AbstractLazilyEncodableSection.java | 1 - .../com/iab/gpp/encoder/section/TcfCaV1.java | 13 +++++----- .../com/iab/gpp/encoder/section/TcfEuV2.java | 13 +++++----- .../encoder/segment/TcfCaV1CoreSegment.java | 4 ++-- .../encoder/segment/TcfEuV2CoreSegment.java | 4 ++-- .../com/iab/gpp/encoder/GppModelTest.java | 4 ++-- .../datatype/encoder/DatetimeEncoderTest.java | 9 ++++--- .../iab/gpp/encoder/section/TcfCaV1Test.java | 24 +++++++++---------- .../iab/gpp/encoder/section/TcfEuV2Test.java | 20 ++++++++-------- 12 files changed, 51 insertions(+), 61 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 6c421df0..8026d69c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.bitstring; import java.util.BitSet; -import java.util.PrimitiveIterator.OfInt; -import java.util.stream.IntStream; -import com.iab.gpp.encoder.datatype.encoder.BaseIntegerSet; import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 8569995e..9a158820 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype; -import java.time.ZonedDateTime; +import java.time.Instant; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; @@ -8,13 +8,13 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableDatetime extends AbstractEncodableBitStringDataType { +public final class EncodableDatetime extends AbstractEncodableBitStringDataType { protected EncodableDatetime() { super(true); } - public EncodableDatetime(ZonedDateTime value) { + public EncodableDatetime(Instant value) { super(true); setValue(value); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index 42e500f6..ebc2462d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import java.time.Instant; -import java.time.ZoneId; -import java.time.ZonedDateTime; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; @@ -11,21 +9,20 @@ public class DatetimeEncoder { private DatetimeEncoder() {} - public static final ZoneId UTC = ZoneId.of("UTC"); - public static void encode(BitStringBuilder builder, ZonedDateTime value) { + public static void encode(BitStringBuilder builder, Instant value) { if (value != null) { - FixedLongEncoder.encode(builder, value.toInstant().toEpochMilli() / 100, 36); + FixedLongEncoder.encode(builder, value.toEpochMilli() / 100, 36); } else { FixedLongEncoder.encode(builder, 0, 36); } } - public static ZonedDateTime decode(BitString bitString) throws DecodingException { + public static Instant decode(BitString bitString) throws DecodingException { if (bitString.length() != 36) { throw new DecodingException("Undecodable Datetime '" + bitString + "'"); } - return ZonedDateTime.ofInstant(Instant.ofEpochMilli(FixedLongEncoder.decode(bitString) * 100L), UTC); + return Instant.ofEpochMilli(FixedLongEncoder.decode(bitString) * 100L); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index df8b9a33..167e7188 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.section; import java.util.List; -import javax.swing.plaf.synth.SynthProgressBarUI; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 7534e7a9..e082f067 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.section; -import java.time.ZonedDateTime; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; @@ -105,7 +104,7 @@ public void setFieldValue(String fieldName, Object value) throws InvalidFieldExc super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { - ZonedDateTime utcDateTime = ZonedDateTime.now(DatetimeEncoder.UTC); + Instant utcDateTime = Instant.now(); super.setFieldValue(TcfCaV1Field.CREATED, utcDateTime); super.setFieldValue(TcfCaV1Field.LAST_UPDATED, utcDateTime); @@ -113,12 +112,12 @@ public void setFieldValue(String fieldName, Object value) throws InvalidFieldExc } - public ZonedDateTime getCreated() { - return (ZonedDateTime) this.getFieldValue(TcfCaV1Field.CREATED); + public Instant getCreated() { + return (Instant) this.getFieldValue(TcfCaV1Field.CREATED); } - public ZonedDateTime getLastUpdated() { - return (ZonedDateTime) this.getFieldValue(TcfCaV1Field.LAST_UPDATED); + public Instant getLastUpdated() { + return (Instant) this.getFieldValue(TcfCaV1Field.LAST_UPDATED); } public Integer getCmpId() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index db70c2ec..3c378d46 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.section; -import java.time.ZonedDateTime; +import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; @@ -122,7 +121,7 @@ public void setFieldValue(String fieldName, Object value) throws InvalidFieldExc super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { - ZonedDateTime utcDateTime = ZonedDateTime.now(DatetimeEncoder.UTC); + Instant utcDateTime = Instant.now(); super.setFieldValue(TcfEuV2Field.CREATED, utcDateTime); super.setFieldValue(TcfEuV2Field.LAST_UPDATED, utcDateTime); @@ -130,12 +129,12 @@ public void setFieldValue(String fieldName, Object value) throws InvalidFieldExc } - public ZonedDateTime getCreated() { - return (ZonedDateTime) this.getFieldValue(TcfEuV2Field.CREATED); + public Instant getCreated() { + return (Instant) this.getFieldValue(TcfEuV2Field.CREATED); } - public ZonedDateTime getLastUpdated() { - return (ZonedDateTime) this.getFieldValue(TcfEuV2Field.LAST_UPDATED); + public Instant getLastUpdated() { + return (Instant) this.getFieldValue(TcfEuV2Field.LAST_UPDATED); } public Integer getCmpId() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index f5c5b9a8..09ecf716 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.segment; -import java.time.ZonedDateTime; +import java.time.Instant; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -34,7 +34,7 @@ public TcfCaV1CoreSegment(String encodedString) { @Override protected EncodableBitStringFields initializeFields() { - ZonedDateTime date = ZonedDateTime.now(); + Instant date = Instant.now(); EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 134e93b5..f0d3c673 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.segment; -import java.time.ZonedDateTime; +import java.time.Instant; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -34,7 +34,7 @@ public TcfEuV2CoreSegment(String encodedString) { @Override protected EncodableBitStringFields initializeFields() { - ZonedDateTime date = ZonedDateTime.now(); + Instant date = Instant.now(); EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VERSION, new EncodableFixedInteger(6, TcfEuV2.VERSION)); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 2daa2321..af54261c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder; +import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -8,7 +9,6 @@ import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.field.TcfEuV2Field; @@ -45,7 +45,7 @@ public class GppModelTest { - private ZonedDateTime utcDateTime = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")); + private Instant utcDateTime = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(); @Test public void testEncodeDefault() { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java index 24d1b29d..ac18fbd3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.time.ZoneId; -import java.time.ZonedDateTime; +import java.time.Instant; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -13,12 +12,12 @@ public class DatetimeEncoderTest { @Test public void test1() throws DecodingException { - ZonedDateTime date1 = ZonedDateTime.now(ZoneId.of("UTC")); + Instant date1 = Instant.now(); BitStringBuilder builder = new BitStringBuilder(); DatetimeEncoder.encode(builder, date1); String encodedDate1 = builder.build().toString(); - ZonedDateTime date2 = DatetimeEncoder.decode(BitString.of(encodedDate1)); + Instant date2 = DatetimeEncoder.decode(BitString.of(encodedDate1)); - Assertions.assertEquals((date1.toInstant().toEpochMilli() / 100L) * 100L, date2.toInstant().toEpochMilli()); + Assertions.assertEquals((date1.toEpochMilli() / 100L) * 100L, date2.toEpochMilli()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java index e3760265..8b6ecf76 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java @@ -21,8 +21,8 @@ public class TcfCaV1Test { public void testEncode1() { TcfCaV1 tcfCaV1 = new TcfCaV1(); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); + tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA", tcfCaV1.encode()); } @@ -50,8 +50,8 @@ public void testEncode2() { tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, Set.of(1)); tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Set.of(0,2)); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); + tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals("BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao", tcfCaV1.encode()); } @@ -62,8 +62,8 @@ public void testEncode3() throws EncodingException, InvalidFieldException { TcfCaV1 tcfCaV1 = new TcfCaV1(); tcfCaV1.setFieldValue(TcfCaV1Field.DISCLOSED_VENDORS, Arrays.asList(1, 2, 3, 5, 6, 7, 10, 11, 12)); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); + tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.IAGO5w", tcfCaV1.encode()); } @@ -77,8 +77,8 @@ public void testEncode4() throws EncodingException, InvalidFieldException { TcfCaV1 tcfCaV1 = new TcfCaV1(); tcfCaV1.setFieldValue(TcfCaV1Field.PUB_RESTRICTIONS, pubRestrictions); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); + tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAACCgBwABAAOAAoADgAJA.YAAAAAAAAAA", tcfCaV1.encode()); } @@ -112,8 +112,8 @@ public void testDecode1() { Assertions.assertEquals(0, tcfCaV1.getNumCustomPurposes()); Assertions.assertEquals(Set.of(), tcfCaV1.getCustomPurposesExpressConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getCustomPurposesImpliedConsent()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getLastUpdated()); + Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getCreated()); + Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getLastUpdated()); Assertions.assertEquals("EN", tcfCaV1.getConsentLanguage()); Assertions.assertEquals(5, tcfCaV1.getId()); @@ -147,8 +147,8 @@ public void testDecode2() { Assertions.assertEquals(3, tcfCaV1.getNumCustomPurposes()); Assertions.assertEquals(Set.of(2), tcfCaV1.getCustomPurposesExpressConsent()); Assertions.assertEquals(Set.of(1, 3), tcfCaV1.getCustomPurposesImpliedConsent()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfCaV1.getLastUpdated()); + Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getCreated()); + Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getLastUpdated()); Assertions.assertEquals("EN", tcfCaV1.getConsentLanguage()); Assertions.assertEquals(5, tcfCaV1.getId()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index fe049381..94bf7ba3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -18,8 +18,8 @@ public class TcfEuV2Test { @Test public void testEncode1() { TcfEuV2 tcfEuV2 = new TcfEuV2(); - tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); - tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); + tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals("CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", tcfEuV2.encode()); } @@ -27,8 +27,8 @@ public void testEncode1() { public void testEncode2() { TcfEuV2 tcfEuV2 = new TcfEuV2(); tcfEuV2.setFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC, true); - tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); - tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC"))); + tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE)); Assertions.assertEquals( @@ -49,8 +49,8 @@ public void testDecode1() { TcfEuV2 tcfEuV2 = new TcfEuV2("CAAAAAAAAAAAAAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA"); Assertions.assertEquals(2, tcfEuV2.getVersion()); - Assertions.assertEquals(ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfEuV2.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfEuV2.getLastUpdated()); + Assertions.assertEquals(ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getCreated()); + Assertions.assertEquals(ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getLastUpdated()); Assertions.assertEquals(0, tcfEuV2.getCmpId()); Assertions.assertEquals(0, tcfEuV2.getCmpVersion()); Assertions.assertEquals(0, tcfEuV2.getConsentScreen()); @@ -98,8 +98,8 @@ public void testDecode2() { TcfEuV2 tcfEuV2 = new TcfEuV2("CPSG_8APSG_8AAAAAAENAACgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA"); Assertions.assertEquals(2, tcfEuV2.getVersion()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfEuV2.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")), tcfEuV2.getLastUpdated()); + Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getCreated()); + Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getLastUpdated()); Assertions.assertEquals(0, tcfEuV2.getCmpId()); Assertions.assertEquals(0, tcfEuV2.getCmpVersion()); Assertions.assertEquals(0, tcfEuV2.getConsentScreen()); @@ -352,8 +352,8 @@ public void testDecode7() throws DecodingException { TcfEuV2 tcfEuV2 = new TcfEuV2("COoC-kUOoC-kUAHABAENAwCoAIAAAELAAAwIF5wAoAAgAGAvMACX_ABBAAQAFA"); Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals("2019-10-07T05:17:54Z[UTC]", tcfEuV2.getFieldValue("Created").toString()); - Assertions.assertEquals("2019-10-07T05:17:54Z[UTC]", tcfEuV2.getFieldValue("LastUpdated").toString()); + Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue("Created").toString()); + Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue("LastUpdated").toString()); Assertions.assertEquals(7, tcfEuV2.getFieldValue("CmpId")); Assertions.assertEquals(1, tcfEuV2.getFieldValue("CmpVersion")); Assertions.assertEquals(0, tcfEuV2.getFieldValue("ConsentScreen")); From 5cc4caf6adab1ef70c9f2b26f26dcd9f70820eea Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 14 Apr 2025 16:40:21 -0400 Subject: [PATCH 037/146] do not fetch date on every parse --- .../java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java | 3 ++- .../java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 09ecf716..5b081f6e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -34,7 +34,8 @@ public TcfCaV1CoreSegment(String encodedString) { @Override protected EncodableBitStringFields initializeFields() { - Instant date = Instant.now(); + // NOTE: TcfCaV1.setFieldValue records modifications + Instant date = Instant.EPOCH; EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index f0d3c673..98f81351 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -34,7 +34,8 @@ public TcfEuV2CoreSegment(String encodedString) { @Override protected EncodableBitStringFields initializeFields() { - Instant date = Instant.now(); + // NOTE: TcfEuV2.setFieldValue records modifications + Instant date = Instant.EPOCH; EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VERSION, new EncodableFixedInteger(6, TcfEuV2.VERSION)); From 0804c2116e321c9633fd1b98d0ea737ecd983223 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 14 Apr 2025 17:21:11 -0400 Subject: [PATCH 038/146] add exception message --- .../com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 9f35c4f8..7ff3483d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -48,7 +48,7 @@ public int size() { private int getOffset(int value) { int offset = from - adjustment + value; if (offset < from) { - throw new IndexOutOfBoundsException(); + throw new IndexOutOfBoundsException("Negative index provided"); } return offset; } From 83e8d5ad204611e13762f26f23a44492a2bf125f Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 15 Apr 2025 14:10:29 -0400 Subject: [PATCH 039/146] expose integerset on rangeentry --- .../main/java/com/iab/gpp/encoder/datatype/RangeEntry.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 10d59c7f..5ea4bd7f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -3,12 +3,13 @@ import java.util.Collection; import java.util.Set; import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; public class RangeEntry { private int key; private int type; - private Set ids; + private final IntegerSet ids; public RangeEntry(int key, int type, Set ids) { super(); @@ -34,7 +35,7 @@ public void setType(int type) { this.type = type; } - public Set getIds() { + public IntegerSet getIds() { return ids; } From 560f123ca8291780204f2c769329a762115e11be Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 26 Jun 2025 18:46:42 -0400 Subject: [PATCH 040/146] clean up rebase --- .../java/com/iab/gpp/encoder/GppModel.java | 44 +++++++++++++++---- .../gpp/encoder/segment/UsNatCoreSegment.java | 10 ++++- .../FibonacciIntegerRangeEncoderTest.java | 6 --- .../encoder/FixedIntegerRangeEncoderTest.java | 6 --- 4 files changed, 44 insertions(+), 22 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 6aa7d423..cd50b329 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -97,6 +97,24 @@ private EncodableSection getOrCreateSection(String sectionName) { case UsTx.NAME: section = new UsTx(); break; + case UsDe.NAME: + section = new UsDe(); + break; + case UsIa.NAME: + section = new UsIa(); + break; + case UsNe.NAME: + section = new UsNe(); + break; + case UsNh.NAME: + section = new UsNh(); + break; + case UsNj.NAME: + section = new UsNj(); + break; + case UsTn.NAME: + section = new UsTn(); + break; } if (section != null) { this.sections.put(sectionName, section); @@ -111,7 +129,6 @@ public void setFieldValue(String sectionName, String fieldName, Object value) { this.dirty = false; this.decoded = true; } - EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.setFieldValue(fieldName, value); @@ -131,7 +148,6 @@ public Object getFieldValue(String sectionName, String fieldName) { this.dirty = false; this.decoded = true; } - EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.getFieldValue(fieldName); @@ -150,7 +166,6 @@ public boolean hasField(String sectionName, String fieldName) { this.dirty = false; this.decoded = true; } - EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.hasField(fieldName); @@ -199,7 +214,6 @@ public EncodableSection getSection(String sectionName) { this.dirty = false; this.decoded = true; } - return this.sections.get(sectionName); } @@ -213,7 +227,6 @@ public void deleteSection(String sectionName) { this.dirty = false; this.decoded = true; } - if (this.sections.remove(sectionName) != null) { this.dirty = true; } @@ -308,7 +321,6 @@ public List getSectionIds() { this.dirty = false; this.decoded = true; } - int length = Sections.SECTION_ORDER.size(); List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { @@ -396,6 +408,24 @@ protected Map decodeModel(String str) { case UsTx.ID: sections.put(UsTx.NAME, new UsTx(section)); break; + case UsDe.ID: + sections.put(UsDe.NAME, new UsDe(section)); + break; + case UsIa.ID: + sections.put(UsIa.NAME, new UsIa(section)); + break; + case UsNe.ID: + sections.put(UsNe.NAME, new UsNe(section)); + break; + case UsNh.ID: + sections.put(UsNh.NAME, new UsNh(section)); + break; + case UsNj.ID: + sections.put(UsNj.NAME, new UsNj(section)); + break; + case UsTn.ID: + sections.put(UsTn.NAME, new UsTn(section)); + break; } } } @@ -428,7 +458,6 @@ public String encodeSection(String sectionName) { this.dirty = false; this.decoded = true; } - EncodableSection section = this.sections.get(sectionName); if (section != null) { return section.encode(); @@ -449,7 +478,6 @@ public void decodeSection(String sectionName, String encodedString) { } EncodableSection section = getOrCreateSection(sectionName); - if (section != null) { section.decode(encodedString); this.dirty = true; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index aefca68a..eaf1daac 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; @@ -82,8 +83,13 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the // DE, IA, NE, NH, NJ, TN release if (bitString.length() == 66) { - bitString = - bitString.substring(0, 48) + "00000000" + bitString.substring(48, 52) + "00" + bitString.substring(52, 62); + BitStringBuilder b = new BitStringBuilder(); + b.append(bitString.substring(0, 48)); + b.append(BitString.empty(8)); + b.append(bitString.substring(48, 52)); + b.append(BitString.empty(2)); + b.append(bitString.substring(52, 62)); + bitString = b.build(); } bitStringEncoder.decode(bitString, fields); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index b533210e..a3982ca2 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -115,10 +115,4 @@ public void testDecode8() { } } - - @Test - public void testGiantRange() { - String max = FibonacciIntegerEncoder.encode(FibonacciIntegerRangeEncoder.MAX_SIZE + 1); - Assertions.assertEquals(List.of(), FibonacciIntegerRangeEncoder.decode("000000000001111" + max)); - } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 3fcc83aa..d21a9450 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -151,10 +151,4 @@ public void testDecode10() { } } - - @Test - public void testGiantRange() { - String max = FibonacciIntegerEncoder.encode(FibonacciIntegerRangeEncoder.MAX_SIZE + 1); - Assertions.assertEquals(List.of(), FixedIntegerRangeEncoder.decode("00000000000110000000000000001" + max)); - } } From e3ea1645c89c1f26d5c757d832d35b04614d7461 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 26 Jun 2025 18:55:07 -0400 Subject: [PATCH 041/146] clean up rebase --- .../main/java/com/iab/gpp/encoder/GppModel.java | 1 + .../datatype/encoder/FibonacciIntegerEncoder.java | 1 - .../encoder/FibonacciIntegerRangeEncoder.java | 1 + .../iab/gpp/encoder/segment/UsNatCoreSegment.java | 14 +++++++------- .../java/com/iab/gpp/encoder/GppModelTest.java | 15 +++++++++++++++ 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index cd50b329..8c8bb223 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -359,6 +359,7 @@ protected String encodeModel(Map sections) { protected Map decodeModel(String str) { if (str == null || str.isEmpty() || str.startsWith("DB")) { Map sections = new HashMap<>(); + if(str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); HeaderV1 header = new HeaderV1(encodedSections.get(0)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 889b8f28..d0f7948a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -55,7 +55,6 @@ public static int decode(BitString bitString) throws DecodingException { } public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { - // must end with "11" int limit = length - 1; int end = fromIndex + length; // must not overflow and must end with "11" diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index d33a5d7b..67958875 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -71,6 +71,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { int end = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; offset = end; startIndex = index + 2; + value.addRange(start, end + 1); } else { int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index eaf1daac..5257d91e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -83,13 +83,13 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the // DE, IA, NE, NH, NJ, TN release if (bitString.length() == 66) { - BitStringBuilder b = new BitStringBuilder(); - b.append(bitString.substring(0, 48)); - b.append(BitString.empty(8)); - b.append(bitString.substring(48, 52)); - b.append(BitString.empty(2)); - b.append(bitString.substring(52, 62)); - bitString = b.build(); + BitStringBuilder builder = new BitStringBuilder(); + builder.append(bitString.substring(0, 48)); + builder.append(BitString.of("00000000")); + builder.append(bitString.substring(48, 52)); + builder.append(BitString.of("00")); + builder.append(bitString.substring(52, 62)); + bitString = builder.build(); } bitStringEncoder.decode(bitString, fields); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index af54261c..a96d55ac 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -72,6 +72,20 @@ public void testEncodeDefault() { } + @Test + public void testDecodingException() { + Assertions.assertThrows(DecodingException.class, () -> { + new GppModel("invalid gpp string").getHeader(); + }); + } + + @Test() + public void testDecodeGarbage() { + Assertions.assertThrows(DecodingException.class, () -> { + new GppModel("z").getUsCtSection(); + }); + } + @Test public void testEncodeDefaultAll() { GppModel gppModel = new GppModel(); @@ -121,6 +135,7 @@ public void testEncodeDefaultAll() { gppModel.setFieldValue(UsTn.NAME, UsTxField.VERSION, UsTx.VERSION); + Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); From 5acf45ab301bfff71f12367d5b19dfab8c2e948f Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 26 Jun 2025 18:56:57 -0400 Subject: [PATCH 042/146] clean up rebase --- .../java/com/iab/gpp/encoder/GppModelTest.java | 14 -------------- .../encoder/FibonacciIntegerEncoderTest.java | 1 - .../encoder/FibonacciIntegerRangeEncoderTest.java | 1 - .../encoder/FixedIntegerRangeEncoderTest.java | 1 - 4 files changed, 17 deletions(-) diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index a96d55ac..738ae8e1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -72,20 +72,6 @@ public void testEncodeDefault() { } - @Test - public void testDecodingException() { - Assertions.assertThrows(DecodingException.class, () -> { - new GppModel("invalid gpp string").getHeader(); - }); - } - - @Test() - public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new GppModel("z").getUsCtSection(); - }); - } - @Test public void testEncodeDefaultAll() { GppModel gppModel = new GppModel(); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 62e95b67..2f2c8520 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index a3982ca2..b8ad0b2f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; import java.util.Arrays; import java.util.Set; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index d21a9450..7fe4db47 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; import java.util.Arrays; import java.util.Set; From 8a87187da0c2649c6f0f66a26000c0f9b9b0bc4a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 26 Jun 2025 19:02:47 -0400 Subject: [PATCH 043/146] set version --- iabgpp-encoder/pom.xml | 2 +- iabgpp-extras-jackson/pom.xml | 4 ++-- iabgpp-extras/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index 03e794e5..07caf281 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 3.2.5-SNAPSHOT + 4.0.0-RC1 iabgpp-encoder diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index 99819c6e..b62612ba 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -7,7 +7,7 @@ iabgpp-core com.iabgpp - 3.2.5-SNAPSHOT + 4.0.0-RC1 iabgpp-extras-jackson @@ -24,7 +24,7 @@ com.iabgpp iabgpp-extras - 3.2.5-SNAPSHOT + 4.0.0-RC1 diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index 592a99ad..b14f682e 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 3.2.5-SNAPSHOT + 4.0.0-RC1 iabgpp-extras diff --git a/pom.xml b/pom.xml index 892005fc..b79ba53c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iabgpp iabgpp-core - 3.2.5-SNAPSHOT + 4.0.0-RC1 IAB GPP Core Library https://github.com/IABTechLabs/iabtcf-java Encode and decode consent information with the IAB GPP v3.0. From 9812b662a44fe50bb2f8700002c78a7d59904b28 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 13:20:46 -0500 Subject: [PATCH 044/146] optimize hot loops --- .../section/AbstractLazilyEncodableSection.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 167e7188..8b94a586 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -30,7 +30,9 @@ public boolean hasField(String fieldName) { this.decoded = true; } - for(EncodableSegment segment : segments) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if (segment.hasField(fieldName)) { return true; } @@ -46,7 +48,9 @@ public Object getFieldValue(String fieldName) { this.decoded = true; } - for(EncodableSegment segment : segments) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if(segment.hasField(fieldName)) { return segment.getFieldValue(fieldName); } @@ -62,7 +66,9 @@ public void setFieldValue(String fieldName, Object value) { this.decoded = true; } - for(EncodableSegment segment : segments) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if(segment.hasField(fieldName)) { segment.setFieldValue(fieldName, value); this.dirty = true; From 674d03f8ff00ab0fd186ad78232254e08a47b727 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 14:10:30 -0500 Subject: [PATCH 045/146] clean up mutability collection flow --- .../AbstractDirtyableBitStringDataType.java | 24 ++++++ .../AbstractEncodableBitStringDataType.java | 6 +- .../iab/gpp/encoder/datatype/DataType.java | 6 +- .../EncodableArrayOfFixedIntegerRanges.java | 20 +++-- .../EncodableFibonacciIntegerRange.java | 7 +- .../datatype/EncodableFixedBitfield.java | 7 +- .../datatype/EncodableFixedIntegerList.java | 11 +-- .../datatype/EncodableFixedIntegerRange.java | 7 +- .../datatype/EncodableFlexibleBitfield.java | 7 +- .../EncodableOptimizedFibonacciRange.java | 7 +- .../EncodableOptimizedFixedRange.java | 7 +- .../{ManagedFixedList.java => FixedList.java} | 20 +++-- .../encoder/datatype/ManagedIntegerSet.java | 77 ------------------- .../iab/gpp/encoder/datatype/RangeEntry.java | 18 ++++- .../datatype/encoder/BaseIntegerSet.java | 56 -------------- .../encoder/datatype/encoder/Dirtyable.java | 6 ++ .../encoder/FibonacciIntegerRangeEncoder.java | 4 +- .../encoder/FixedIntegerRangeEncoder.java | 4 +- .../datatype/encoder/IntegerBitSet.java | 73 +++++++++++++++++- .../encoder/datatype/encoder/IntegerSet.java | 2 +- .../OptimizedFibonacciRangeEncoder.java | 3 +- .../encoder/OptimizedFixedRangeEncoder.java | 3 +- .../AbstractLazilyEncodableSegment.java | 4 +- 23 files changed, 171 insertions(+), 208 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{ManagedFixedList.java => FixedList.java} (59%) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java new file mode 100644 index 00000000..cf2abaa6 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -0,0 +1,24 @@ +package com.iab.gpp.encoder.datatype; + +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +// This class is used to handle collection types. +// It is important that we monitor the collections we return for changes. +public abstract class AbstractDirtyableBitStringDataType + extends AbstractEncodableBitStringDataType { + + protected AbstractDirtyableBitStringDataType(boolean hardFailIfMissing) { + super(hardFailIfMissing); + } + + @Override + public boolean isDirty() { + return super.isDirty() || value.isDirty(); + } + + @Override + public void setDirty(boolean dirty) { + super.setDirty(dirty); + value.setDirty(dirty); + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 8cb8cdb6..48cf6922 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -23,11 +23,11 @@ public AbstractEncodableBitStringDataType withValidator(Predicate validato return this; } - public boolean hasValue() { + public final boolean hasValue() { return this.value != null; } - public T getValue() { + public final T getValue() { return this.value; } @@ -48,7 +48,7 @@ public void setValue(Object value) { } - public boolean getHardFailIfMissing() { + public final boolean getHardFailIfMissing() { return this.hardFailIfMissing; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 58d70730..be85c17b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -1,9 +1,9 @@ package com.iab.gpp.encoder.datatype; -public interface DataType { +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +public interface DataType extends Dirtyable { boolean hasValue(); T getValue(); void setValue(Object value); - boolean isDirty(); - void setDirty(boolean dirty); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index bcc9ff98..ad805233 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -12,16 +11,18 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableArrayOfFixedIntegerRanges extends AbstractEncodableBitStringDataType> { +public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { private int keyBitStringLength; private int typeBitStringLength; + private static final FixedList EMPTY = new FixedList<>(List.of()); + public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { super(hardFailIfMissing); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; - this.value = Collections.emptyList(); + this.value = EMPTY; } @Override @@ -58,11 +59,13 @@ public void decode(BitString bitString) { IntegerSet ids = FixedIntegerRangeEncoder.decode(substring); index += substring.length(); - entries.add(new RangeEntry(key, type, ids)); + RangeEntry entry = new RangeEntry(key, type, ids); + entry.setDirty(false); + entries.add(entry); } - // NOTE: this requires that updates to structure be done using the setter - this.value = Collections.unmodifiableList(entries); + // NOTE: this requires that adding/removing ranges uses the setter + this.value = new FixedList<>(entries); } catch (Exception e) { throw new DecodingException(e); } @@ -98,4 +101,9 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE } } + @SuppressWarnings("unchecked") + @Override + public void setValue(Object value) { + super.setValue(new FixedList<>((List) value)); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 19963a55..2c8df3c7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFibonacciIntegerRange extends AbstractEncodableBitStringDataType { +public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitStringDataType { public EncodableFibonacciIntegerRange() { super(true); @@ -57,9 +57,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index e7404069..48615032 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFixedBitfield extends AbstractEncodableBitStringDataType { +public final class EncodableFixedBitfield extends AbstractDirtyableBitStringDataType { private final int numElements; @@ -49,9 +49,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 3a4db509..e38cd8b9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFixedIntegerList extends AbstractEncodableBitStringDataType> { +public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType> { private int elementBitStringLength; private int numElements; @@ -37,7 +37,7 @@ public void encode(BitStringBuilder builder) { public void decode(BitString bitString) { try { - this.value = FixedIntegerListEncoder.decode(bitString, this.elementBitStringLength, this.numElements); + this.value = new FixedList<>(FixedIntegerListEncoder.decode(bitString, this.elementBitStringLength, this.numElements)); } catch (Exception e) { throw new DecodingException(e); } @@ -61,11 +61,6 @@ public void setValue(Object value) { if (v.size() > numElements) { v = v.subList(0, numElements); } - super.setValue(v); - } - - @Override - public List getValue() { - return new ManagedFixedList<>(this, super.getValue()); + super.setValue(new FixedList<>(v)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 7bbbc4a6..56b94487 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -10,7 +10,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFixedIntegerRange extends AbstractEncodableBitStringDataType { +public final class EncodableFixedIntegerRange extends AbstractDirtyableBitStringDataType { protected EncodableFixedIntegerRange() { super(true); @@ -56,9 +56,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 46337183..04e8d8a5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFlexibleBitfield extends AbstractEncodableBitStringDataType { +public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringDataType { private IntSupplier getLengthSupplier; @@ -51,9 +51,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java index 1aba7d88..d966ad66 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java @@ -10,7 +10,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableOptimizedFibonacciRange extends AbstractEncodableBitStringDataType { +public final class EncodableOptimizedFibonacciRange extends AbstractDirtyableBitStringDataType { protected EncodableOptimizedFibonacciRange() { super(true); @@ -64,9 +64,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index a0669607..14b00485 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableOptimizedFixedRange extends AbstractEncodableBitStringDataType { +public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStringDataType { public EncodableOptimizedFixedRange() { super(true); @@ -56,9 +56,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java similarity index 59% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java index df38f67f..4a3955e6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java @@ -2,14 +2,14 @@ import java.util.AbstractList; import java.util.List; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -final class ManagedFixedList extends AbstractList { +public final class FixedList extends AbstractList implements Dirtyable { - private final DataType parent; + private boolean dirty; private final List delegate; - ManagedFixedList(DataType parent, List delegate) { - this.parent = parent; + FixedList(List delegate) { this.delegate = delegate; } @@ -27,7 +27,7 @@ public T get(int index) { public T set(int index, T value) { T prior = delegate.set(index, value); if (prior != null) { - parent.setDirty(true); + dirty = true; } return prior; } @@ -36,4 +36,14 @@ public T set(int index, T value) { public String toString() { return delegate.toString(); } + + @Override + public boolean isDirty() { + return dirty; + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java deleted file mode 100644 index daccfdb9..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import java.util.PrimitiveIterator; -import java.util.stream.IntStream; -import java.util.stream.Stream; -import com.iab.gpp.encoder.datatype.encoder.BaseIntegerSet; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; - -final class ManagedIntegerSet extends BaseIntegerSet { - - private final DataType parent; - private final IntegerSet delegate; - - ManagedIntegerSet(DataType parent, IntegerSet delegate) { - this.parent = parent; - this.delegate = delegate; - } - - @Override - public void clear() { - delegate.clear(); - parent.setDirty(true); - } - - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - @Override - public int size() { - return delegate.size(); - } - - @Override - public PrimitiveIterator.OfInt iterator() { - return delegate.iterator(); - } - - @Override - public Stream stream(){ - return delegate.stream(); - } - - @Override - public IntStream intStream() { - return delegate.intStream(); - } - - @Override - public boolean containsInt(int value) { - return delegate.containsInt(value); - } - - @Override - public boolean addInt(int value) { - boolean modified = delegate.addInt(value); - if (modified) { - parent.setDirty(true); - } - return modified; - } - - @Override - public boolean removeInt(int value) { - boolean modified = delegate.removeInt(value); - if (modified) { - parent.setDirty(true); - } - return modified; - } - - @Override - public String toString() { - return delegate.toString(); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 5ea4bd7f..ed997b16 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -2,11 +2,13 @@ import java.util.Collection; import java.util.Set; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -public class RangeEntry { +public class RangeEntry implements Dirtyable { + private boolean dirty; private int key; private int type; private final IntegerSet ids; @@ -24,6 +26,7 @@ public int getKey() { } public void setKey(int key) { + this.dirty = true; this.key = key; } @@ -32,6 +35,7 @@ public int getType() { } public void setType(int type) { + this.dirty = true; this.type = type; } @@ -40,8 +44,20 @@ public IntegerSet getIds() { } public void setIds(Collection ids) { + this.dirty = true; this.ids.clear(); this.ids.addAll(ids); } + @Override + public boolean isDirty() { + return dirty || ids.isDirty(); + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + ids.setDirty(dirty); + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java deleted file mode 100644 index bb872855..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import java.util.AbstractSet; -import java.util.Collection; - -public abstract class BaseIntegerSet extends AbstractSet implements IntegerSet { - - @Override - public final boolean contains(Object value) { - if (value instanceof Integer) { - return containsInt((Integer) value); - } - return false; - } - - @Override - public final boolean add(Integer value) { - if (value == null) { - return false; - } - return addInt(value); - } - - @Override - public final boolean remove(Object value) { - if (value instanceof Integer) { - return removeInt((Integer) value); - } - return false; - } - - @Override - public boolean removeAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } - - @Override - public boolean retainAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (!c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java new file mode 100644 index 00000000..2353de1d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java @@ -0,0 +1,6 @@ +package com.iab.gpp.encoder.datatype.encoder; + +public interface Dirtyable { + boolean isDirty(); + void setDirty(boolean dirty); +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 67958875..baac388a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -47,7 +47,7 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitString bitString) throws DecodingException { + public static IntegerBitSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } @@ -81,7 +81,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { startIndex = index + 2; } } - + value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index a92e2b09..48ef1429 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -43,7 +43,7 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitString bitString) throws DecodingException { + public static IntegerBitSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } @@ -69,7 +69,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { startIndex += 16; } } - + value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 7ff3483d..663b28f8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -1,6 +1,8 @@ package com.iab.gpp.encoder.datatype.encoder; +import java.util.AbstractSet; import java.util.BitSet; +import java.util.Collection; import java.util.NoSuchElementException; import java.util.Spliterator; import java.util.Spliterators; @@ -9,14 +11,15 @@ import java.util.stream.IntStream; import java.util.stream.StreamSupport; -public final class IntegerBitSet extends BaseIntegerSet { +public final class IntegerBitSet extends AbstractSet implements IntegerSet { private static final Logger LOGGER = Logger.getLogger(IntegerBitSet.class.getName()); static final int MAX_COLLECTION_SIZE = 8192; - protected final BitSet bitSet; - protected final int from; - protected final int to; + private boolean dirty; + private final BitSet bitSet; + private final int from; + private final int to; private final int adjustment; public IntegerBitSet(BitSet bitSet, int from, int to, int adjustment) { @@ -55,6 +58,7 @@ private int getOffset(int value) { @Override public void clear() { + dirty = true; bitSet.clear(from, to); } @@ -126,6 +130,7 @@ public void addRange(int start, int end) { logOutOfRange(end); realEnd = to; } + dirty = true; bitSet.set(realStart, realEnd); } @@ -140,6 +145,7 @@ public boolean addInt(int value) { return false; } bitSet.set(offset, true); + dirty = true; return true; } @@ -154,6 +160,65 @@ public boolean removeInt(int value) { return false; } bitSet.set(offset, false); + dirty = true; return true; } + + @Override + public final boolean contains(Object value) { + if (value instanceof Integer) { + return containsInt((Integer) value); + } + return false; + } + + @Override + public final boolean add(Integer value) { + if (value == null) { + return false; + } + return addInt(value); + } + + @Override + public final boolean remove(Object value) { + if (value instanceof Integer) { + return removeInt((Integer) value); + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } + + @Override + public boolean retainAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (!c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } + + @Override + public boolean isDirty() { + return dirty; + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index bc9aa3f7..5f27795e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -5,7 +5,7 @@ import java.util.Set; import java.util.stream.IntStream; -public interface IntegerSet extends Set { +public interface IntegerSet extends Set, Dirtyable { boolean containsInt(int value); default boolean containsAny(Collection c) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index 66160efd..195bb0dc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -28,7 +28,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerSet decode(BitString bitString) throws DecodingException { + public static IntegerBitSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } @@ -44,6 +44,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { value.addInt(i + 1); } } + value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 5a5660f8..2721e94a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -27,7 +27,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerSet decode(BitString bitString) throws DecodingException { + public static IntegerBitSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } @@ -43,6 +43,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { value.addInt(i + 1); } } + value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 9e07c18e..b054ba04 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import java.util.function.Predicate; import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.FixedList; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.Fields; @@ -10,7 +10,7 @@ public abstract class AbstractLazilyEncodableSegment> implem protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - protected static final Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { + protected static final Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { for (int n : l) { if (n < 0 || n > 2) { return false; From cd9a8761c961ce1397daf4dc6b8e4034959c5dbd Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 15:33:46 -0500 Subject: [PATCH 046/146] use arrays --- .../EncodableArrayOfFixedIntegerRanges.java | 8 ++++---- .../datatype/EncodableFixedIntegerList.java | 18 ++++++++++-------- .../encoder/FixedIntegerListEncoder.java | 13 +++++++------ 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index ad805233..78069946 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -46,7 +46,7 @@ public void encode(BitStringBuilder sb) { public void decode(BitString bitString) { try { int size = FixedIntegerEncoder.decode(bitString, 0, 12); - List entries = new ArrayList<>(size); + RangeEntry[] entries = new RangeEntry[size]; int index = 12; for (int i = 0; i < size; i++) { int key = FixedIntegerEncoder.decode(bitString, index, keyBitStringLength); @@ -61,11 +61,11 @@ public void decode(BitString bitString) { RangeEntry entry = new RangeEntry(key, type, ids); entry.setDirty(false); - entries.add(entry); + entries[i] = entry; } // NOTE: this requires that adding/removing ranges uses the setter - this.value = new FixedList<>(entries); + this.value = new FixedList<>(Arrays.asList(entries)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index e38cd8b9..d9f10208 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -54,13 +54,15 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - List v = new ArrayList<>((List) value); - for (int i = v.size(); i < numElements; i++) { - v.add(0); + List list = (List) value; + int size = list.size(); + if (size != numElements) { + Integer[] newList = new Integer[numElements]; + for (int i = 0; i < numElements; i++) { + newList[i] = i < size ? list.get(i) : 0; + } + list = Arrays.asList(newList); } - if (v.size() > numElements) { - v = v.subList(0, numElements); - } - super.setValue(new FixedList<>(v)); + super.setValue(new FixedList<>(list)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 7140af9c..b7b7acdd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -41,16 +41,17 @@ public static List decode(BitString bitString, int elementBitStringLeng bitString = bitString.expandTo(elementBitStringLength * numElements); - List value = new ArrayList<>(numElements); + Integer[] value = new Integer[numElements]; length = bitString.length(); + int idx = 0; for (int i = 0; i < length; i += elementBitStringLength) { - value.add(IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength))); + value[idx++] = IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength)); } - while (value.size() < numElements) { - value.add(0); + while (idx < numElements) { + value[idx++] = 0; } - return value; + return Arrays.asList(value); } } From bf62f5fb21e1164ad2bb1604ebea52f1daffa7a4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 15:42:24 -0500 Subject: [PATCH 047/146] clean up dirty flow again --- .../EncodableArrayOfFixedIntegerRanges.java | 1 - .../com/iab/gpp/encoder/datatype/FixedList.java | 14 ++++++++++++++ .../encoder/FibonacciIntegerRangeEncoder.java | 1 - .../datatype/encoder/FixedIntegerRangeEncoder.java | 1 - .../encoder/OptimizedFibonacciRangeEncoder.java | 1 - .../encoder/OptimizedFixedRangeEncoder.java | 1 - 6 files changed, 14 insertions(+), 5 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 78069946..b1035592 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -60,7 +60,6 @@ public void decode(BitString bitString) { index += substring.length(); RangeEntry entry = new RangeEntry(key, type, ids); - entry.setDirty(false); entries[i] = entry; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java index 4a3955e6..4e2d8b04 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java @@ -39,11 +39,25 @@ public String toString() { @Override public boolean isDirty() { + int size = delegate.size(); + for (int i = 0; i < size; i++) { + T value = delegate.get(i); + if (value instanceof Dirtyable && ((Dirtyable) value).isDirty()) { + return true; + } + } return dirty; } @Override public void setDirty(boolean dirty) { + int size = delegate.size(); + for (int i = 0; i < size; i++) { + T value = delegate.get(i); + if (value instanceof Dirtyable) { + ((Dirtyable) value).setDirty(dirty); + } + } this.dirty = dirty; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index baac388a..46b409bc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -81,7 +81,6 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException startIndex = index + 2; } } - value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 48ef1429..6160fa12 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -69,7 +69,6 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException startIndex += 16; } } - value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index 195bb0dc..9240bee7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -44,7 +44,6 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException value.addInt(i + 1); } } - value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 2721e94a..3126c60d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -43,7 +43,6 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException value.addInt(i + 1); } } - value.setDirty(false); return value; } } From 56b930e4fd3f2c9b70588b8beb6dd6daf50ca341 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 16:55:25 -0500 Subject: [PATCH 048/146] FixedIntegerList --- .../datatype/EncodableFixedIntegerList.java | 26 +++----- .../encoder/datatype/FixedIntegerList.java | 59 +++++++++++++++++++ .../iab/gpp/encoder/datatype/FixedList.java | 4 +- .../encoder/FixedIntegerListEncoder.java | 17 +++--- .../com/iab/gpp/encoder/section/UsCa.java | 11 ++-- .../com/iab/gpp/encoder/section/UsCo.java | 6 +- .../com/iab/gpp/encoder/section/UsCt.java | 11 ++-- .../com/iab/gpp/encoder/section/UsDe.java | 11 ++-- .../com/iab/gpp/encoder/section/UsFl.java | 11 ++-- .../com/iab/gpp/encoder/section/UsIa.java | 6 +- .../com/iab/gpp/encoder/section/UsMt.java | 11 ++-- .../com/iab/gpp/encoder/section/UsNat.java | 11 ++-- .../com/iab/gpp/encoder/section/UsNe.java | 6 +- .../com/iab/gpp/encoder/section/UsNh.java | 11 ++-- .../com/iab/gpp/encoder/section/UsNj.java | 11 ++-- .../com/iab/gpp/encoder/section/UsOr.java | 11 ++-- .../com/iab/gpp/encoder/section/UsTn.java | 6 +- .../com/iab/gpp/encoder/section/UsTx.java | 6 +- .../com/iab/gpp/encoder/section/UsUt.java | 6 +- .../com/iab/gpp/encoder/section/UsVa.java | 6 +- .../AbstractLazilyEncodableSegment.java | 4 +- .../gpp/encoder/segment/UsCaCoreSegment.java | 5 +- .../gpp/encoder/segment/UsCoCoreSegment.java | 3 +- .../gpp/encoder/segment/UsCtCoreSegment.java | 5 +- .../gpp/encoder/segment/UsDeCoreSegment.java | 5 +- .../gpp/encoder/segment/UsFlCoreSegment.java | 5 +- .../gpp/encoder/segment/UsIaCoreSegment.java | 3 +- .../gpp/encoder/segment/UsMtCoreSegment.java | 5 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 5 +- .../gpp/encoder/segment/UsNeCoreSegment.java | 3 +- .../gpp/encoder/segment/UsNhCoreSegment.java | 5 +- .../gpp/encoder/segment/UsNjCoreSegment.java | 5 +- .../gpp/encoder/segment/UsOrCoreSegment.java | 5 +- .../gpp/encoder/segment/UsTnCoreSegment.java | 3 +- .../gpp/encoder/segment/UsTxCoreSegment.java | 3 +- .../gpp/encoder/segment/UsUtCoreSegment.java | 3 +- .../gpp/encoder/segment/UsVaCoreSegment.java | 3 +- 37 files changed, 171 insertions(+), 146 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index d9f10208..c15ad1d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -9,22 +8,16 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType> { +public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType { private int elementBitStringLength; private int numElements; - protected EncodableFixedIntegerList(int elementBitStringLength, int numElements) { + public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { super(true); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; - } - - public EncodableFixedIntegerList(int elementBitStringLength, List value) { - super(true); - this.elementBitStringLength = elementBitStringLength; - this.numElements = value.size(); - setValue(value); + super.setValue(new FixedIntegerList(numElements)); } public void encode(BitStringBuilder builder) { @@ -37,7 +30,7 @@ public void encode(BitStringBuilder builder) { public void decode(BitString bitString) { try { - this.value = new FixedList<>(FixedIntegerListEncoder.decode(bitString, this.elementBitStringLength, this.numElements)); + FixedIntegerListEncoder.decode(this.value, bitString, this.elementBitStringLength, this.numElements); } catch (Exception e) { throw new DecodingException(e); } @@ -56,13 +49,10 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE public void setValue(Object value) { List list = (List) value; int size = list.size(); - if (size != numElements) { - Integer[] newList = new Integer[numElements]; - for (int i = 0; i < numElements; i++) { - newList[i] = i < size ? list.get(i) : 0; - } - list = Arrays.asList(newList); + for (int i = 0; i < numElements; i++) { + this.value.set(i, i < size ? list.get(i) : 0); } - super.setValue(new FixedList<>(list)); + // call validator + super.setValue(this.value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java new file mode 100644 index 00000000..3d04802b --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -0,0 +1,59 @@ +package com.iab.gpp.encoder.datatype; + +import java.util.AbstractList; +import java.util.Arrays; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +public final class FixedIntegerList extends AbstractList implements Dirtyable { + + private boolean dirty; + private final byte[] array; + + public FixedIntegerList(int size) { + this.array = new byte[size]; + } + + @Override + public int size() { + return array.length; + } + + @Override + public Integer get(int index) { + return getInt(index); + } + + public int getInt(int index) { + return array[index]; + } + + @Override + public Integer set(int index, Integer value) { + return setInt(index, value); + } + + public int setInt(int index, int value) { + if(value < 0 || value > 0xff) { + throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 256."); + } + int prior = array[index]; + array[index] = (byte) value; + dirty = true; + return prior; + } + + @Override + public String toString() { + return Arrays.toString(array); + } + + @Override + public boolean isDirty() { + return dirty; + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java index 4e2d8b04..962feb0e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java @@ -26,9 +26,7 @@ public T get(int index) { @Override public T set(int index, T value) { T prior = delegate.set(index, value); - if (prior != null) { - dirty = true; - } + dirty = true; return prior; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index b7b7acdd..e4ed367f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -1,10 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,7 +28,13 @@ public static void encode(BitStringBuilder builder, List value, int ele } } - public static List decode(BitString bitString, int elementBitStringLength, int numElements) + public static FixedIntegerList decode(BitString bitString, int elementBitStringLength, int numElements) { + FixedIntegerList out = new FixedIntegerList(numElements); + decode(out, bitString, elementBitStringLength, numElements); + return out; + } + + public static void decode(FixedIntegerList out, BitString bitString, int elementBitStringLength, int numElements) throws DecodingException { int length = bitString.length(); if (length > elementBitStringLength * numElements) { @@ -41,17 +47,14 @@ public static List decode(BitString bitString, int elementBitStringLeng bitString = bitString.expandTo(elementBitStringLength * numElements); - Integer[] value = new Integer[numElements]; length = bitString.length(); int idx = 0; for (int i = 0; i < length; i += elementBitStringLength) { - value[idx++] = IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength)); + out.set(idx++, IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength))); } while (idx < numElements) { - value[idx++] = 0; + out.set(idx++, 0); } - - return Arrays.asList(value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 3ab9bbd2..d737de1d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCaCoreSegment; @@ -98,14 +99,12 @@ public Integer getSharingOptOut() { return (Integer) this.getFieldValue(UsCaField.SHARING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getPersonalDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 083031a8..31a40d9d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCoCoreSegment; @@ -98,9 +99,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsCoField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsCoField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsCoField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 9d49656f..3bc3c5b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCtCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsCtField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsCtField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsCtField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getMspaCoveredTransaction() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 52664417..cd3b11c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsDeCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsDeField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsDeField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 6e6fd6b5..3c8888e1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsFlCoreSegment; @@ -87,14 +88,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsFlField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsFlField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsFlField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 37e5cb53..b7ffc38e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsIaCoreSegment; @@ -102,9 +103,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsIaField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsIaField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsIaField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 03dea7c1..a4e57d2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsMtCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsMtField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsMtField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsMtField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 809f2569..64b6c8f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNatCoreSegment; @@ -114,14 +115,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getPersonalDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 36e9ff8b..a009def8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNeCoreSegment; @@ -98,9 +99,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsNeField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsNeField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsNeField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index b2f22d81..a907d2ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNhCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsNhField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsNhField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsNhField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index b694d403..c5c648ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNjCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsNjField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsNjField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 3e14ca1a..41d0d3ce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsOrCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsOrField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsOrField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 894f9ed9..23b17edf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsTnCoreSegment; @@ -98,9 +99,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsTnField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsTnField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsTnField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 0feec120..521ff729 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsTxCoreSegment; @@ -98,9 +99,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsTxField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsTxField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsTxField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 96d2217b..05cc7836 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsUtCoreSegment; @@ -91,9 +92,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsUtField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsUtField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsUtField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index c144a2d3..95a0abd0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsVaCoreSegment; @@ -87,9 +88,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsVaField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsVaField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsVaField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index b054ba04..d4f5f3c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -2,7 +2,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.datatype.FixedList; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.Fields; @@ -10,7 +10,7 @@ public abstract class AbstractLazilyEncodableSegment> implem protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - protected static final Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { + protected static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { for (int n : l) { if (n < 0 || n > 2) { return false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index eafc1f12..0072a91f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsCaField.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 9) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0)) + fields.put(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 2) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsCaField.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 98e96fc9..deafdc52 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -41,7 +40,7 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCoField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0)) + fields.put(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 7) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index d6e27686..46535363 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsCtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsCtField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 534fbf28..6b935cf8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,10 +41,10 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsDeField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsDeField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 9) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 5) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 384d34ac..9e6e49b7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsFlField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsFlField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 530ccd13..087f0445 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -44,7 +43,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsIaField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsIaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 49d8813b..89cad156 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsMtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsMtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 5257d91e..3212b317 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -50,9 +49,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsNatField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNatField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 16) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsNatField.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index fb7b77a1..52d06230 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,7 +41,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsNeField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNeField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 789f86b5..44ce9219 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsNhField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNhField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 99f94205..3de4bb2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsNjField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNjField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 10) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0)) + fields.put(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index f9ef489d..a1278600 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsOrField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsOrField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 11) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index b6bd3409..c22afdf6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,7 +41,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsTnField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsTnField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 2b809263..8c67106a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,7 +41,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsTxField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsTxField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 368cfca5..27e42ca4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -44,7 +43,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsUtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsUtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index b374520b..d0028cb6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,7 +41,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsVaField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsVaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); From 8f8000184ff16447ecceddfc58330c6df759d513 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 17:01:04 -0500 Subject: [PATCH 049/146] avoid itable calls to IntegerSet --- .../iab/gpp/encoder/bitstring/BitString.java | 3 +- .../EncodableFibonacciIntegerRange.java | 3 +- .../datatype/EncodableFixedBitfield.java | 3 +- .../datatype/EncodableFixedIntegerRange.java | 3 +- .../datatype/EncodableFlexibleBitfield.java | 3 +- .../EncodableOptimizedFixedRange.java | 3 +- .../iab/gpp/encoder/datatype/RangeEntry.java | 3 +- .../encoder/FibonacciIntegerRangeEncoder.java | 4 +- .../encoder/FixedIntegerRangeEncoder.java | 4 +- .../datatype/encoder/IntegerBitSet.java | 210 ----------------- .../datatype/encoder/IntegerCache.java | 2 +- .../encoder/datatype/encoder/IntegerSet.java | 220 ++++++++++++++++-- .../OptimizedFibonacciRangeEncoder.java | 4 +- .../encoder/OptimizedFixedRangeEncoder.java | 4 +- .../FibonacciIntegerRangeEncoderTest.java | 2 +- .../encoder/FixedBitfieldEncoderTest.java | 18 +- .../encoder/FixedIntegerRangeEncoderTest.java | 2 +- 17 files changed, 234 insertions(+), 257 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 8026d69c..77601d40 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.bitstring; import java.util.BitSet; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -46,7 +45,7 @@ public static final BitString of(String str) { } public IntegerSet toIntegerSet() { - return new IntegerBitSet(bitSet, from, to, 1); + return new IntegerSet(bitSet, from, to, 1); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 2c8df3c7..3bf4a54c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; @@ -15,7 +14,7 @@ public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitSt public EncodableFibonacciIntegerRange() { super(true); - this.value = new IntegerBitSet(); + this.value = new IntegerSet(); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 48615032..993d8551 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -16,7 +15,7 @@ public final class EncodableFixedBitfield extends AbstractDirtyableBitStringData public EncodableFixedBitfield(int numElements) { super(true); this.numElements = numElements; - this.value = new IntegerBitSet(numElements); + this.value = new IntegerSet(numElements); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 56b94487..66b9232f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; @@ -14,7 +13,7 @@ public final class EncodableFixedIntegerRange extends AbstractDirtyableBitString protected EncodableFixedIntegerRange() { super(true); - this.value = new IntegerBitSet(); + this.value = new IntegerSet(); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 04e8d8a5..9287d62d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -18,7 +17,7 @@ public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringD public EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { super(true); this.getLengthSupplier = getLengthSupplier; - this.value = new IntegerBitSet(); + this.value = new IntegerSet(); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 14b00485..aa716c37 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; @@ -15,7 +14,7 @@ public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStri public EncodableOptimizedFixedRange() { super(true); - this.value = new IntegerBitSet(); + this.value = new IntegerSet(); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index ed997b16..29e33eed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -3,7 +3,6 @@ import java.util.Collection; import java.util.Set; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; public class RangeEntry implements Dirtyable { @@ -17,7 +16,7 @@ public RangeEntry(int key, int type, Set ids) { super(); this.key = key; this.type = type; - this.ids = new IntegerBitSet(); + this.ids = new IntegerSet(); this.ids.addAll(ids); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 46b409bc..95dbf869 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -47,13 +47,13 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerBitSet decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - IntegerBitSet value = new IntegerBitSet(); + IntegerSet value = new IntegerSet(); int offset = 0; int startIndex = 12; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 6160fa12..a399ba49 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -43,13 +43,13 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerBitSet decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - IntegerBitSet value = new IntegerBitSet(); + IntegerSet value = new IntegerSet(); int startIndex = 12; for (int i = 0; i < count; i++) { boolean group = BooleanEncoder.decode(bitString, startIndex, 1); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 663b28f8..6ae65a06 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -11,214 +11,4 @@ import java.util.stream.IntStream; import java.util.stream.StreamSupport; -public final class IntegerBitSet extends AbstractSet implements IntegerSet { - private static final Logger LOGGER = Logger.getLogger(IntegerBitSet.class.getName()); - static final int MAX_COLLECTION_SIZE = 8192; - - private boolean dirty; - private final BitSet bitSet; - private final int from; - private final int to; - private final int adjustment; - - public IntegerBitSet(BitSet bitSet, int from, int to, int adjustment) { - this.bitSet = bitSet; - this.from = from; - this.to = to; - this.adjustment = adjustment; - } - - public IntegerBitSet(int limit) { - this(new BitSet(0), 0, limit, 0); - } - - public IntegerBitSet() { - this(MAX_COLLECTION_SIZE); - } - - @Override - public int size() { - OfInt it = iterator(); - int count = 0; - while (it.hasNext()) { - it.next(); - count++; - } - return count; - } - - private int getOffset(int value) { - int offset = from - adjustment + value; - if (offset < from) { - throw new IndexOutOfBoundsException("Negative index provided"); - } - return offset; - } - - @Override - public void clear() { - dirty = true; - bitSet.clear(from, to); - } - - @Override - public boolean isEmpty() { - return bitSet.nextSetBit(from) == -1; - } - - @Override - public boolean containsInt(int value) { - int offset = getOffset(value); - return offset < to && bitSet.get(offset); - } - - @Override - public OfInt iterator() { - return new OfInt() { - int cursor = bitSet.nextSetBit(from); - - @Override - public boolean hasNext() { - return cursor < to && cursor != -1; - } - - @Override - public Integer next() { - return IntegerCache.valueOf(nextInt()); - } - - @Override - public int nextInt() { - if (!this.hasNext()) { - throw new NoSuchElementException(); - } - int next = cursor; - cursor = bitSet.nextSetBit(cursor + 1); - return next - from + adjustment; - } - }; - } - - @Override - public Spliterator.OfInt spliterator(){ - return Spliterators.spliteratorUnknownSize( - iterator(), - Spliterator.ORDERED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL); - } - - @Override - public IntStream intStream() { - return StreamSupport.intStream(spliterator(), false); - } - - private static final void logOutOfRange(int value) { - LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: "+ value); - } - - public void addRange(int start, int end) { - if (end < start) { - throw new IllegalArgumentException("Negative length range"); - } - int realStart = getOffset(start); - int realEnd = getOffset(end); - if (realStart >= to) { - logOutOfRange(start); - return; - } - if (realEnd > to) { - logOutOfRange(end); - realEnd = to; - } - dirty = true; - bitSet.set(realStart, realEnd); - } - - public boolean addInt(int value) { - int offset = getOffset(value); - if (offset >= to) { - logOutOfRange(value); - return false; - } - boolean present = bitSet.get(offset); - if (present) { - return false; - } - bitSet.set(offset, true); - dirty = true; - return true; - } - - public boolean removeInt(int value) { - int offset = getOffset(value); - if (offset >= to) { - logOutOfRange(value); - return false; - } - boolean present = bitSet.get(offset); - if (!present) { - return false; - } - bitSet.set(offset, false); - dirty = true; - return true; - } - - @Override - public final boolean contains(Object value) { - if (value instanceof Integer) { - return containsInt((Integer) value); - } - return false; - } - - @Override - public final boolean add(Integer value) { - if (value == null) { - return false; - } - return addInt(value); - } - - @Override - public final boolean remove(Object value) { - if (value instanceof Integer) { - return removeInt((Integer) value); - } - return false; - } - - @Override - public boolean removeAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } - - @Override - public boolean retainAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (!c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } - - @Override - public boolean isDirty() { - return dirty; - } - - @Override - public void setDirty(boolean dirty) { - this.dirty = dirty; - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java index d92823e5..07471ea2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import static com.iab.gpp.encoder.datatype.encoder.IntegerBitSet.MAX_COLLECTION_SIZE; +import static com.iab.gpp.encoder.datatype.encoder.IntegerSet.MAX_COLLECTION_SIZE; final class IntegerCache { private IntegerCache() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 5f27795e..387f35fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -1,28 +1,222 @@ package com.iab.gpp.encoder.datatype.encoder; +import java.util.AbstractSet; +import java.util.BitSet; import java.util.Collection; -import java.util.PrimitiveIterator; -import java.util.Set; +import java.util.NoSuchElementException; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.PrimitiveIterator.OfInt; +import java.util.logging.Logger; import java.util.stream.IntStream; +import java.util.stream.StreamSupport; -public interface IntegerSet extends Set, Dirtyable { - boolean containsInt(int value); +public final class IntegerSet extends AbstractSet implements Dirtyable { + private static final Logger LOGGER = Logger.getLogger(IntegerSet.class.getName()); - default boolean containsAny(Collection c) { - for (Object e : c) { - if (!contains(e)) { - return false; + static final int MAX_COLLECTION_SIZE = 8192; + + private boolean dirty; + private final BitSet bitSet; + private final int from; + private final int to; + private final int adjustment; + + public IntegerSet(BitSet bitSet, int from, int to, int adjustment) { + this.bitSet = bitSet; + this.from = from; + this.to = to; + this.adjustment = adjustment; + } + + public IntegerSet(int limit) { + this(new BitSet(0), 0, limit, 0); + } + + public IntegerSet() { + this(MAX_COLLECTION_SIZE); + } + + @Override + public int size() { + OfInt it = iterator(); + int count = 0; + while (it.hasNext()) { + it.next(); + count++; + } + return count; + } + + private int getOffset(int value) { + int offset = from - adjustment + value; + if (offset < from) { + throw new IndexOutOfBoundsException("Negative index provided"); + } + return offset; + } + + @Override + public void clear() { + dirty = true; + bitSet.clear(from, to); + } + + @Override + public boolean isEmpty() { + return bitSet.nextSetBit(from) == -1; + } + + public boolean containsInt(int value) { + int offset = getOffset(value); + return offset < to && bitSet.get(offset); + } + + @Override + public OfInt iterator() { + return new OfInt() { + int cursor = bitSet.nextSetBit(from); + + @Override + public boolean hasNext() { + return cursor < to && cursor != -1; + } + + @Override + public Integer next() { + return IntegerCache.valueOf(nextInt()); } + + @Override + public int nextInt() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + int next = cursor; + cursor = bitSet.nextSetBit(cursor + 1); + return next - from + adjustment; + } + }; + } + + @Override + public Spliterator.OfInt spliterator(){ + return Spliterators.spliteratorUnknownSize( + iterator(), + Spliterator.ORDERED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL); + } + + public IntStream intStream() { + return StreamSupport.intStream(spliterator(), false); + } + + private static final void logOutOfRange(int value) { + LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: "+ value); + } + + public void addRange(int start, int end) { + if (end < start) { + throw new IllegalArgumentException("Negative length range"); + } + int realStart = getOffset(start); + int realEnd = getOffset(end); + if (realStart >= to) { + logOutOfRange(start); + return; + } + if (realEnd > to) { + logOutOfRange(end); + realEnd = to; + } + dirty = true; + bitSet.set(realStart, realEnd); + } + + public boolean addInt(int value) { + int offset = getOffset(value); + if (offset >= to) { + logOutOfRange(value); + return false; + } + boolean present = bitSet.get(offset); + if (present) { + return false; + } + bitSet.set(offset, true); + dirty = true; + return true; + } + + public boolean removeInt(int value) { + int offset = getOffset(value); + if (offset >= to) { + logOutOfRange(value); + return false; } + boolean present = bitSet.get(offset); + if (!present) { + return false; + } + bitSet.set(offset, false); + dirty = true; return true; } - boolean addInt(int value); + @Override + public final boolean contains(Object value) { + if (value instanceof Integer) { + return containsInt((Integer) value); + } + return false; + } + + @Override + public final boolean add(Integer value) { + if (value == null) { + return false; + } + return addInt(value); + } + + @Override + public final boolean remove(Object value) { + if (value instanceof Integer) { + return removeInt((Integer) value); + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } - boolean removeInt(int value); + @Override + public boolean retainAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (!c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } - IntStream intStream(); + @Override + public boolean isDirty() { + return dirty; + } @Override - PrimitiveIterator.OfInt iterator(); -} + public void setDirty(boolean dirty) { + this.dirty = dirty; + } +} \ No newline at end of file diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index 9240bee7..a0b8494e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -28,7 +28,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerBitSet decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } @@ -38,7 +38,7 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException } else { BitString bits = bitString.substring(17); int length = bits.length(); - IntegerBitSet value = new IntegerBitSet(); + IntegerSet value = new IntegerSet(); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { value.addInt(i + 1); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 3126c60d..607ace29 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -27,7 +27,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerBitSet decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } @@ -37,7 +37,7 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException } else { BitString bits = bitString.substring(17); int length = bits.length(); - IntegerBitSet value = new IntegerBitSet(); + IntegerSet value = new IntegerSet(); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { value.addInt(i + 1); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index b8ad0b2f..0579095b 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -43,7 +43,7 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FibonacciIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("000000000010001110011011", builder.build().toString()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index a0549270..1a18454f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -13,7 +13,7 @@ public class FixedBitfieldEncoderTest { @Test public void testEncode1() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("00", builder.build().toString()); } @@ -21,7 +21,7 @@ public void testEncode1() { @Test public void testEncode2() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 1); Assertions.assertEquals("0", builder.build().toString()); } @@ -29,7 +29,7 @@ public void testEncode2() { @Test public void testEncode3() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.add(0); FixedBitfieldEncoder.encode(builder, set, 1); Assertions.assertEquals("1", builder.build().toString()); @@ -38,7 +38,7 @@ public void testEncode3() { @Test public void testEncode4() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("00", builder.build().toString()); } @@ -46,7 +46,7 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("01", builder.build().toString()); @@ -55,7 +55,7 @@ public void testEncode5() { @Test public void testEncode6() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addInt(0); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("10", builder.build().toString()); @@ -64,7 +64,7 @@ public void testEncode6() { @Test public void testEncode7() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addInt(0); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); @@ -73,7 +73,7 @@ public void testEncode7() { @Test public void testEncode8() { - IntegerSet set = new IntegerBitSet(5); + IntegerSet set = new IntegerSet(5); for(int i = 0; i <= 10; i++) { set.addInt(i); } @@ -82,7 +82,7 @@ public void testEncode8() { @Test public void testEncode9() { - IntegerBitSet set = new IntegerBitSet(5); + IntegerSet set = new IntegerSet(5); set.addRange(0,10); Assertions.assertEquals(Set.of(0,1,2,3,4), set); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 7fe4db47..7f187b7a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -45,7 +45,7 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FixedIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", From 15153777c4ff1ab7bc4fd13c0c2b3394b83e4a43 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 13:28:08 -0500 Subject: [PATCH 050/146] update tests --- .../iab/gpp/encoder/datatype/FixedList.java | 9 ++-- .../datatype/encoder/IntegerBitSet.java | 14 ------ .../datatype/FixedIntegerListTest.java | 32 ++++++++++++ .../gpp/encoder/datatype/FixedListTest.java | 33 ++++++++++++ .../datatype/encoder/IntegerSetTest.java | 50 +++++++++++++++++++ 5 files changed, 118 insertions(+), 20 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java create mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java create mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java create mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java index 962feb0e..c5ea40c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java @@ -4,7 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -public final class FixedList extends AbstractList implements Dirtyable { +public final class FixedList extends AbstractList implements Dirtyable { private boolean dirty; private final List delegate; @@ -40,7 +40,7 @@ public boolean isDirty() { int size = delegate.size(); for (int i = 0; i < size; i++) { T value = delegate.get(i); - if (value instanceof Dirtyable && ((Dirtyable) value).isDirty()) { + if (value.isDirty()) { return true; } } @@ -51,10 +51,7 @@ public boolean isDirty() { public void setDirty(boolean dirty) { int size = delegate.size(); for (int i = 0; i < size; i++) { - T value = delegate.get(i); - if (value instanceof Dirtyable) { - ((Dirtyable) value).setDirty(dirty); - } + delegate.get(i).setDirty(dirty); } this.dirty = dirty; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java deleted file mode 100644 index 6ae65a06..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import java.util.AbstractSet; -import java.util.BitSet; -import java.util.Collection; -import java.util.NoSuchElementException; -import java.util.Spliterator; -import java.util.Spliterators; -import java.util.logging.Logger; -import java.util.PrimitiveIterator.OfInt; -import java.util.stream.IntStream; -import java.util.stream.StreamSupport; - - diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java new file mode 100644 index 00000000..166c48e4 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java @@ -0,0 +1,32 @@ +package com.iab.gpp.encoder.datatype; + +import static org.junit.jupiter.api.Assertions.*; +import java.util.List; +import org.junit.jupiter.api.Test; + +class FixedIntegerListTest { + + @Test + void test() { + FixedIntegerList list = new FixedIntegerList(5); + assertFalse(list.isDirty()); + list.set(0, 2); + list.set(1, 1); + list.set(2, 5); + list.set(3, 8); + list.set(4, 3); + assertThrows(IllegalArgumentException.class, () -> list.set(4, Integer.MAX_VALUE)); + assertThrows(IllegalArgumentException.class, () -> list.set(4, -1)); + assertEquals(5, list.size()); + assertEquals(List.of(2,1,5,8,3), list); + assertEquals(2, list.get(0)); + assertEquals(1, list.get(1)); + assertEquals(5, list.get(2)); + assertEquals(8, list.get(3)); + assertEquals(3, list.get(4)); + assertTrue(list.isDirty()); + list.setDirty(false); + assertFalse(list.isDirty()); + } + +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java new file mode 100644 index 00000000..ad1c14b7 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java @@ -0,0 +1,33 @@ +package com.iab.gpp.encoder.datatype; + +import static org.junit.jupiter.api.Assertions.*; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.Test; + +class FixedListTest { + + @Test + void test() { + RangeEntry item1 = new RangeEntry(1, 2, Set.of(3,4,5)); + RangeEntry item2 = new RangeEntry(6, 7, Set.of(8,9,10)); + RangeEntry item3 = new RangeEntry(11, 12, Set.of(13,14,15)); + FixedList list = new FixedList<>(Arrays.asList(new RangeEntry[] {item1, item2, item3})); + assertEquals(List.of(item1, item2, item3), list); + assertEquals(item1, list.get(0)); + assertEquals(item2, list.get(1)); + assertEquals(item3, list.get(2)); + assertEquals(3, list.size()); + assertFalse(list.isEmpty()); + assertTrue(list.isDirty()); + list.setDirty(false); + assertFalse(list.isDirty()); + item2.getIds().remove(9); + assertTrue(list.isDirty()); + RangeEntry item2a = new RangeEntry(100, 200, Set.of(300,400,500)); + assertEquals(item2, list.set(1, item2a)); + assertEquals(item2a, list.get(1)); + } + +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java new file mode 100644 index 00000000..7d4cdb3c --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java @@ -0,0 +1,50 @@ +package com.iab.gpp.encoder.datatype.encoder; + +import static org.junit.jupiter.api.Assertions.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.Test; + +class IntegerSetTest { + + @Test + void test() { + IntegerSet set = new IntegerSet(5); + assertFalse(set.isDirty()); + assertTrue(set.isEmpty()); + set.add(0); + set.add(2); + set.add(3); + assertEquals(Set.of(0,2,3), set); + assertTrue(set.isDirty()); + assertFalse(set.isEmpty()); + assertEquals(3, set.size()); + assertFalse(set.remove(1)); + assertTrue(set.remove(2)); + assertEquals(2, set.size()); + set.addAll(List.of(3,4)); + assertEquals(Set.of(0,3,4), set); + List out = new ArrayList<>(); + Iterator it = set.iterator(); + it.forEachRemaining(out::add); + assertEquals(List.of(0,3,4), out); + assertFalse(set.contains(2)); + assertTrue(set.contains(3)); + assertTrue(set.isDirty()); + set.setDirty(false); + assertFalse(set.isDirty()); + set.retainAll(Set.of(1,2,3)); + assertEquals(Set.of(3), set); + assertTrue(set.addAll(List.of(1,3,4))); + assertFalse(set.addAll(List.of(1,3,4))); + assertTrue(set.removeAll(List.of(3,4))); + assertEquals(Set.of(1), set); + set.clear(); + assertTrue(set.isEmpty()); + set.addRange(1, 3); + assertEquals(Set.of(1,2), set); + } + +} From 74870a8c995bcfe76cf9aca0c845ff4c4ce14946 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 14:26:53 -0500 Subject: [PATCH 051/146] fixed signed byte int limit --- .../java/com/iab/gpp/encoder/datatype/FixedIntegerList.java | 5 +++-- .../com/iab/gpp/encoder/datatype/FixedIntegerListTest.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index 3d04802b..4ad15042 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -33,8 +33,9 @@ public Integer set(int index, Integer value) { } public int setInt(int index, int value) { - if(value < 0 || value > 0xff) { - throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 256."); + // NOTE: int 128 is prevented since it would get turned into byte -128 + if(value < 0 || value > 128) { + throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 128."); } int prior = array[index]; array[index] = (byte) value; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java index 166c48e4..6aee9b3e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java @@ -15,7 +15,7 @@ void test() { list.set(2, 5); list.set(3, 8); list.set(4, 3); - assertThrows(IllegalArgumentException.class, () -> list.set(4, Integer.MAX_VALUE)); + assertThrows(IllegalArgumentException.class, () -> list.set(4, 128)); assertThrows(IllegalArgumentException.class, () -> list.set(4, -1)); assertEquals(5, list.size()); assertEquals(List.of(2,1,5,8,3), list); From 92cbd01d0c8b2d4e8cc9f4504e0bdee874ff1021 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 14:42:57 -0500 Subject: [PATCH 052/146] javadoc --- .../java/com/iab/gpp/encoder/datatype/FixedIntegerList.java | 4 ++++ .../java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index 4ad15042..c463f0c7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -4,6 +4,10 @@ import java.util.Arrays; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; +/** + * An optimized implementation of {@literal List} of fixed size. + * Use {@link #getInt(int)} and {@link #setInt(int, int)} for efficient access. + */ public final class FixedIntegerList extends AbstractList implements Dirtyable { private boolean dirty; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 387f35fe..340252e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -11,6 +11,10 @@ import java.util.stream.IntStream; import java.util.stream.StreamSupport; +/** + * An optimized implementation of {@literal Set} backed by a {@link java.util.BitSet}. + * Use {@link #containsInt(int)}, {@link #addInt(int)}, and {@link #removeInt(int)} for efficient access. + */ public final class IntegerSet extends AbstractSet implements Dirtyable { private static final Logger LOGGER = Logger.getLogger(IntegerSet.class.getName()); From 5070310e556a7643c9617fc9a166125b02b5a763 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 15:23:35 -0500 Subject: [PATCH 053/146] DirtyableList --- .../gpp/encoder/datatype/DirtyableList.java | 103 ++++++++++++++++++ .../EncodableArrayOfFixedIntegerRanges.java | 17 +-- .../iab/gpp/encoder/datatype/FixedList.java | 58 ---------- .../iab/gpp/encoder/datatype/RangeEntry.java | 12 +- ...edListTest.java => DirtyableListTest.java} | 11 +- 5 files changed, 126 insertions(+), 75 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java rename iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/{FixedListTest.java => DirtyableListTest.java} (75%) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java new file mode 100644 index 00000000..dffbb74d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java @@ -0,0 +1,103 @@ +package com.iab.gpp.encoder.datatype; + +import java.util.AbstractList; +import java.util.ArrayList; +import java.util.Collection; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +// This class tracks whether a list has been modified. +final class DirtyableList extends AbstractList implements Dirtyable { + + private boolean dirty; + private final ArrayList delegate; + + DirtyableList() { + this.delegate = new ArrayList<>(); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public boolean add(T value) { + boolean result = delegate.add(value); + dirty = true; + return result; + } + + @Override + public T get(int index) { + return delegate.get(index); + } + + @Override + public T set(int index, T value) { + T prior = delegate.set(index, value); + dirty = true; + return prior; + } + + @Override + public void add(int index, T element) { + delegate.add(index, element); + dirty = true; + } + + @Override + public T remove(int index) { + T old = delegate.remove(index); + dirty = true; + return old; + } + + @Override + public int indexOf(Object o) { + return delegate.indexOf(o); + } + + @Override + public int lastIndexOf(Object o) { + return delegate.lastIndexOf(o); + } + + @Override + public void clear() { + delegate.clear(); + dirty = true; + } + + @Override + public boolean addAll(Collection c) { + boolean result = delegate.addAll(c); + dirty = true; + return result; + } + + @Override + public String toString() { + return delegate.toString(); + } + + @Override + public boolean isDirty() { + int size = delegate.size(); + for (int i = 0; i < size; i++) { + T value = delegate.get(i); + if (value.isDirty()) { + return true; + } + } + return dirty; + } + + @Override + public void setDirty(boolean dirty) { + int size = delegate.size(); + for (int i = 0; i < size; i++) { + delegate.get(i).setDirty(dirty); + } + this.dirty = dirty; + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index b1035592..b76026d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -11,18 +10,16 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { +public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { private int keyBitStringLength; private int typeBitStringLength; - private static final FixedList EMPTY = new FixedList<>(List.of()); - public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { super(hardFailIfMissing); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; - this.value = EMPTY; + this.value = new DirtyableList<>(); } @Override @@ -46,7 +43,7 @@ public void encode(BitStringBuilder sb) { public void decode(BitString bitString) { try { int size = FixedIntegerEncoder.decode(bitString, 0, 12); - RangeEntry[] entries = new RangeEntry[size]; + value.clear(); int index = 12; for (int i = 0; i < size; i++) { int key = FixedIntegerEncoder.decode(bitString, index, keyBitStringLength); @@ -60,11 +57,8 @@ public void decode(BitString bitString) { index += substring.length(); RangeEntry entry = new RangeEntry(key, type, ids); - entries[i] = entry; + value.add(entry); } - - // NOTE: this requires that adding/removing ranges uses the setter - this.value = new FixedList<>(Arrays.asList(entries)); } catch (Exception e) { throw new DecodingException(e); } @@ -103,6 +97,7 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - super.setValue(new FixedList<>((List) value)); + this.value.clear(); + this.value.addAll((List) value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java deleted file mode 100644 index c5ea40c9..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import java.util.AbstractList; -import java.util.List; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; - -public final class FixedList extends AbstractList implements Dirtyable { - - private boolean dirty; - private final List delegate; - - FixedList(List delegate) { - this.delegate = delegate; - } - - @Override - public int size() { - return delegate.size(); - } - - @Override - public T get(int index) { - return delegate.get(index); - } - - @Override - public T set(int index, T value) { - T prior = delegate.set(index, value); - dirty = true; - return prior; - } - - @Override - public String toString() { - return delegate.toString(); - } - - @Override - public boolean isDirty() { - int size = delegate.size(); - for (int i = 0; i < size; i++) { - T value = delegate.get(i); - if (value.isDirty()) { - return true; - } - } - return dirty; - } - - @Override - public void setDirty(boolean dirty) { - int size = delegate.size(); - for (int i = 0; i < size; i++) { - delegate.get(i).setDirty(dirty); - } - this.dirty = dirty; - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 29e33eed..027934f8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -1,18 +1,17 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import java.util.Set; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -public class RangeEntry implements Dirtyable { +public final class RangeEntry implements Dirtyable { private boolean dirty; private int key; private int type; private final IntegerSet ids; - public RangeEntry(int key, int type, Set ids) { + public RangeEntry(int key, int type, Collection ids) { super(); this.key = key; this.type = type; @@ -20,6 +19,13 @@ public RangeEntry(int key, int type, Set ids) { this.ids.addAll(ids); } + RangeEntry(int key, int type, IntegerSet ids) { + super(); + this.key = key; + this.type = type; + this.ids = ids; + } + public int getKey() { return key; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java similarity index 75% rename from iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java rename to iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java index ad1c14b7..dbbc28b0 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java @@ -1,19 +1,20 @@ package com.iab.gpp.encoder.datatype; import static org.junit.jupiter.api.Assertions.*; -import java.util.Arrays; import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; -class FixedListTest { +class DirtyableListTest { @Test void test() { RangeEntry item1 = new RangeEntry(1, 2, Set.of(3,4,5)); RangeEntry item2 = new RangeEntry(6, 7, Set.of(8,9,10)); RangeEntry item3 = new RangeEntry(11, 12, Set.of(13,14,15)); - FixedList list = new FixedList<>(Arrays.asList(new RangeEntry[] {item1, item2, item3})); + DirtyableList list = new DirtyableList<>(); + list.add(item1); + list.addAll(List.of(item2, item3)); assertEquals(List.of(item1, item2, item3), list); assertEquals(item1, list.get(0)); assertEquals(item2, list.get(1)); @@ -28,6 +29,10 @@ void test() { RangeEntry item2a = new RangeEntry(100, 200, Set.of(300,400,500)); assertEquals(item2, list.set(1, item2a)); assertEquals(item2a, list.get(1)); + assertEquals(item3, list.remove(2)); + assertEquals(2, list.size()); + list.add(item3); + assertEquals(List.of(item1, item2a, item3), list); } } From 06f6c2843abe35ecc0c026b3850f2addfc3cb92b Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 15:25:04 -0500 Subject: [PATCH 054/146] fix test --- .../java/com/iab/gpp/encoder/datatype/FixedIntegerList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index c463f0c7..9e6176e4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -38,7 +38,7 @@ public Integer set(int index, Integer value) { public int setInt(int index, int value) { // NOTE: int 128 is prevented since it would get turned into byte -128 - if(value < 0 || value > 128) { + if(value < 0 || value >= 128) { throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 128."); } int prior = array[index]; From 2b97c419dd2180c7a5fc8f562f418f56536e5a5a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 15 Jan 2026 18:32:25 -0500 Subject: [PATCH 055/146] remove substring --- .../iab/gpp/encoder/bitstring/BitString.java | 53 ++------------- .../encoder/bitstring/BitStringBuilder.java | 2 +- .../encoder/bitstring/BitStringEncoder.java | 13 +--- .../encoder/bitstring/BitStringReader.java | 49 ++++++++++++++ .../AbstractEncodableBitStringDataType.java | 2 - .../EncodableArrayOfFixedIntegerRanges.java | 50 ++------------ .../encoder/datatype/EncodableBoolean.java | 13 +--- .../encoder/datatype/EncodableDataType.java | 4 +- .../encoder/datatype/EncodableDatetime.java | 13 +--- .../datatype/EncodableFibonacciInteger.java | 18 +---- .../EncodableFibonacciIntegerRange.java | 22 +----- .../datatype/EncodableFixedBitfield.java | 13 +--- .../datatype/EncodableFixedInteger.java | 13 +--- .../datatype/EncodableFixedIntegerList.java | 13 +--- .../datatype/EncodableFixedIntegerRange.java | 22 +----- .../datatype/EncodableFixedString.java | 13 +--- .../datatype/EncodableFlexibleBitfield.java | 12 +--- .../EncodableOptimizedFibonacciRange.java | 67 ------------------- .../EncodableOptimizedFixedRange.java | 21 +----- .../encoder/datatype/SubstringException.java | 18 ----- .../encoder/datatype/UnencodableBoolean.java | 6 +- .../datatype/encoder/DatetimeEncoder.java | 9 +-- .../encoder/FibonacciIntegerEncoder.java | 11 ++- .../encoder/FibonacciIntegerRangeEncoder.java | 29 ++------ .../encoder/FixedBitfieldEncoder.java | 5 +- .../datatype/encoder/FixedIntegerEncoder.java | 6 +- .../encoder/FixedIntegerListEncoder.java | 31 ++------- .../encoder/FixedIntegerRangeEncoder.java | 26 ++----- .../datatype/encoder/FixedLongEncoder.java | 6 +- .../datatype/encoder/FixedStringEncoder.java | 11 +-- .../OptimizedFibonacciRangeEncoder.java | 50 -------------- .../encoder/OptimizedFixedRangeEncoder.java | 22 ++---- .../gpp/encoder/segment/UsNatCoreSegment.java | 18 ++--- .../datatype/EncodableBooleanTest.java | 22 ------ .../datatype/EncodableDatetimeTest.java | 23 ------- .../EncodableFibonacciIntegerRangeTest.java | 16 ----- .../datatype/EncodableFixedBitfieldTest.java | 20 ------ .../EncodableFixedIntegerListTest.java | 20 ------ .../EncodableFixedIntegerRangeTest.java | 19 +----- .../datatype/EncodableFixedIntegerTest.java | 20 ------ .../datatype/EncodableFixedStringTest.java | 20 ------ .../EncodableOptimizedFixedRangeTest.java | 23 ++----- .../datatype/encoder/DatetimeEncoderTest.java | 3 +- .../encoder/FibonacciIntegerEncoderTest.java | 27 +++++--- .../FibonacciIntegerRangeEncoderTest.java | 21 +++--- .../encoder/FixedBitfieldEncoderTest.java | 21 +++--- .../encoder/FixedIntegerEncoderTest.java | 19 ++++-- .../encoder/FixedIntegerListEncoderTest.java | 48 +++++++------ .../encoder/FixedIntegerRangeEncoderTest.java | 28 ++++---- .../encoder/FixedLongEncoderTest.java | 21 +++--- .../encoder/FixedStringEncoderTest.java | 11 ++- 51 files changed, 282 insertions(+), 761 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/SubstringException.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 77601d40..c12d7132 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -9,23 +9,13 @@ public final class BitString { public static final char FALSE = '0'; public static final String TRUE_STRING = new String(new char[] {TRUE}); public static final String FALSE_STRING = new String(new char[] {FALSE}); - private static final BitString EMPTY = new BitString(new BitSet(), 0, 0); private final BitSet bitSet; - private final int from; - private final int to; + private final int length; - BitString(BitSet bitSet, int from, int to) { + BitString(BitSet bitSet, int length) { this.bitSet = bitSet; - this.from = from; - this.to = to; - } - - public static final BitString empty(int size) { - if (size == 0) { - return EMPTY; - } - return new BitString(new BitSet(size), 0, size); + this.length = length; } public static final BitString of(String str) { @@ -44,54 +34,25 @@ public static final BitString of(String str) { return builder.build(); } - public IntegerSet toIntegerSet() { + public IntegerSet toIntegerSet(int from, int to) { return new IntegerSet(bitSet, from, to, 1); } @Override public String toString() { StringBuilder sb = new StringBuilder(length()); - for (int i = from; i < to; i++) { + for (int i = 0; i < length; i++) { sb.append(bitSet.get(i) ? TRUE : FALSE); } return sb.toString(); } public boolean getValue(int i) { - return bitSet.get(from + i); + return bitSet.get(i); } public int length() { - return to - from; - } - - public BitString substring(int i) { - return substring(i, length()); - } - - public BitString substring(int newFrom, int newTo) { - int length = length(); - if (newFrom > newTo || newFrom < 0 || newFrom > length || newTo > length) { - throw new IllegalArgumentException("Invalid substring"); - } - int oldFrom = this.from; - return new BitString(bitSet, oldFrom + newFrom, oldFrom + newTo); - } - - public BitString expandTo(int target) { - int needed = target - length(); - if (needed == 0) { - return this; - } - if (needed < 0) { - return substring(0, target); - } - BitStringBuilder sb = new BitStringBuilder(target); - sb.append(this); - for (int i = 0; i < needed; i++) { - sb.append(false); - } - return sb.build(); + return length; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java index 88d0ffaa..bf780ff4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java @@ -15,7 +15,7 @@ public BitStringBuilder() { } public BitString build() { - return new BitString(bitSet, 0, length); + return new BitString(bitSet, length); } public BitStringBuilder append(boolean value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java index 79ce4ef6..437bb046 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java @@ -2,7 +2,6 @@ import java.util.List; import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; -import com.iab.gpp.encoder.datatype.SubstringException; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; @@ -35,21 +34,13 @@ public BitStringBuilder encode(EncodableBitStringFields fields) { } public void decode(BitString bitString, EncodableBitStringFields fields) { - int index = 0; List fieldNames = fields.getNames(); + BitStringReader reader = new BitStringReader(bitString); for (int i = 0; i < fieldNames.size(); i++) { AbstractEncodableBitStringDataType field = fields.get(i); if (field != null) { try { - BitString substring = field.substring(bitString, index); - field.decode(substring); - index += substring.length(); - } catch (SubstringException e) { - if(field.getHardFailIfMissing()) { - throw new DecodingException("Unable to decode " + fieldNames.get(i), e); - } else { - return; - } + field.decode(reader); } catch (Exception e) { throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java new file mode 100644 index 00000000..1869e76a --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java @@ -0,0 +1,49 @@ +package com.iab.gpp.encoder.bitstring; + +import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; + +public final class BitStringReader { + + private int offset = 0; + private final BitString bitString; + + public BitStringReader(BitString bitString) { + this.bitString = bitString; + } + + public int readInt(int length) { + int newOffset = offset + length; + int out = FixedIntegerEncoder.decode(bitString, offset, newOffset); + offset = newOffset; + return out; + } + + public long readLong(int length) { + int newOffset = offset + length; + long out = FixedLongEncoder.decode(bitString, offset, newOffset); + offset = newOffset; + return out; + } + + public boolean readBool() { + return bitString.getValue(offset++); + } + + public int readFibonacci() { + int indexOfEndTag = FibonacciIntegerEncoder.indexOfEndTag(bitString, offset) + 2; + int out = FibonacciIntegerEncoder.decode(bitString, offset, indexOfEndTag); + offset = indexOfEndTag; + return out; + } + + public IntegerSet readIntegerSet(int length) { + int newOffset = offset + length; + IntegerSet out = bitString.toIntegerSet(offset, newOffset); + offset = newOffset; + return out; + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 48cf6922..5510871c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -52,8 +52,6 @@ public final boolean getHardFailIfMissing() { return this.hardFailIfMissing; } - public abstract BitString substring(BitString bitString, int fromIndex) throws SubstringException; - public boolean isDirty() { return dirty; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index b76026d1..e004db1c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -2,8 +2,8 @@ import java.util.List; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; @@ -40,22 +40,14 @@ public void encode(BitStringBuilder sb) { } @Override - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - int size = FixedIntegerEncoder.decode(bitString, 0, 12); + int size = reader.readInt(12); value.clear(); - int index = 12; for (int i = 0; i < size; i++) { - int key = FixedIntegerEncoder.decode(bitString, index, keyBitStringLength); - index += keyBitStringLength; - - int type = FixedIntegerEncoder.decode(bitString, index, typeBitStringLength); - index += typeBitStringLength; - - BitString substring = new EncodableFixedIntegerRange().substring(bitString, index); - IntegerSet ids = FixedIntegerRangeEncoder.decode(substring); - index += substring.length(); - + int key = reader.readInt(keyBitStringLength); + int type = reader.readInt(typeBitStringLength); + IntegerSet ids = FixedIntegerRangeEncoder.decode(reader); RangeEntry entry = new RangeEntry(key, type, ids); value.add(entry); } @@ -64,36 +56,6 @@ public void decode(BitString bitString) { } } - @Override - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - BitStringBuilder sb = new BitStringBuilder(); - BitString lengthString = bitString.substring(fromIndex, fromIndex + 12); - sb.append(lengthString); - - int size = FixedIntegerEncoder.decode(lengthString); - - int index = fromIndex + lengthString.length(); - for (int i = 0; i < size; i++) { - BitString keySubstring = bitString.substring(index, index + keyBitStringLength); - index += keySubstring.length(); - sb.append(keySubstring); - - BitString typeSubstring = bitString.substring(index, index + typeBitStringLength); - index += typeSubstring.length(); - sb.append(typeSubstring); - - BitString rangeSubstring = new EncodableFixedIntegerRange().substring(bitString, index); - index += rangeSubstring.length(); - sb.append(rangeSubstring); - } - - return sb.build(); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 3c418fd8..df96560b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -21,19 +22,11 @@ public void encode(BitStringBuilder builder){ } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = BooleanEncoder.decode(bitString); + this.value = reader.readBool(); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + 1); - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java index 530ae121..bab54fd5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java @@ -1,10 +1,10 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; public interface EncodableDataType extends DataType { void encode(BitStringBuilder builder); - void decode(BitString str); + void decode(BitStringReader reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 9a158820..bf677028 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -27,19 +28,11 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = DatetimeEncoder.decode(bitString); + this.value = DatetimeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + 36); - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index c0106dc9..02924acf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -30,24 +31,11 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FibonacciIntegerEncoder.decode(bitString); + this.value = reader.readFibonacci(); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, fromIndex); - if (index > 0) { - return bitString.substring(fromIndex, index + 2); - } else { - return bitString; - } - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 3bf4a54c..6a36ad6b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; @@ -25,31 +26,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FibonacciIntegerRangeEncoder.decode(bitString); + this.value = FibonacciIntegerRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int count = FixedIntegerEncoder.decode(bitString, fromIndex, 12); - int index = fromIndex + 12; - for (int i = 0; i < count; i++) { - if (bitString.getValue(index)) { - index = FibonacciIntegerEncoder.indexOfEndTag(bitString, FibonacciIntegerEncoder.indexOfEndTag(bitString, index + 1) + 2) + 2; - } else { - index = FibonacciIntegerEncoder.indexOfEndTag(bitString, index + 1) + 2; - } - } - return bitString.substring(fromIndex, index); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 993d8551..9d328753 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -26,22 +27,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedBitfieldEncoder.decode(bitString); + this.value = reader.readIntegerSet(this.numElements); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + this.numElements); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index d6dc9775..5d9beb20 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -29,19 +30,11 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedIntegerEncoder.decode(bitString); + this.value = reader.readInt(bitStringLength); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + this.bitStringLength); - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index c15ad1d6..7d95c260 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,22 +29,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - FixedIntegerListEncoder.decode(this.value, bitString, this.elementBitStringLength, this.numElements); + FixedIntegerListEncoder.decode(this.value, reader, this.elementBitStringLength); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + (this.elementBitStringLength * numElements)); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 66b9232f..c53bf0e0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; @@ -24,31 +25,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedIntegerRangeEncoder.decode(bitString); + this.value = FixedIntegerRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int count = FixedIntegerEncoder.decode(bitString, fromIndex, 12); - int index = fromIndex + 12; - for (int i = 0; i < count; i++) { - if (bitString.getValue(index)) { - index += 33; - } else { - index += 17; - } - } - return bitString.substring(fromIndex, index); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 7221078c..36b54442 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -29,19 +30,11 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedStringEncoder.decode(bitString); + this.value = FixedStringEncoder.decode(reader, this.stringLength); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + this.stringLength * 6); - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 9287d62d..31a56bed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -28,21 +29,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedBitfieldEncoder.decode(bitString); + this.value = reader.readIntegerSet(getLengthSupplier.getAsInt()); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + this.getLengthSupplier.getAsInt()); - } catch (Exception e) { - throw new SubstringException(e); - } - } @SuppressWarnings("unchecked") @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java deleted file mode 100644 index d966ad66..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import java.util.Collection; -import java.util.List; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.datatype.encoder.OptimizedFibonacciRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; - -public final class EncodableOptimizedFibonacciRange extends AbstractDirtyableBitStringDataType { - - protected EncodableOptimizedFibonacciRange() { - super(true); - } - - public EncodableOptimizedFibonacciRange(List value) { - super(true); - setValue(value); - } - - public EncodableOptimizedFibonacciRange(List value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - setValue(value); - } - - public void encode(BitStringBuilder builder) { - try { - OptimizedFibonacciRangeEncoder.encode(builder, this.value); - } catch (Exception e) { - throw new EncodingException(e); - } - } - - public void decode(BitString bitString) { - try { - this.value = OptimizedFibonacciRangeEncoder.decode(bitString); - } catch (Exception e) { - throw new DecodingException(e); - } - } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int max = FixedIntegerEncoder.decode(bitString, fromIndex, 16); - if (bitString.getValue(fromIndex + 16)) { - BitStringBuilder out = new BitStringBuilder(); - out.append(bitString.substring(fromIndex, fromIndex + 17)); - out.append(new EncodableFibonacciIntegerRange().substring(bitString, fromIndex + 17)); - return out.build(); - } else { - return bitString.substring(fromIndex, fromIndex + 17 + max); - } - } catch (Exception e) { - throw new SubstringException(e); - } - } - - @SuppressWarnings("unchecked") - @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index aa716c37..ee918f97 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; @@ -25,30 +26,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = OptimizedFixedRangeEncoder.decode(bitString); + this.value = OptimizedFixedRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int max = FixedIntegerEncoder.decode(bitString, fromIndex, 16); - if (bitString.getValue(fromIndex + 16)) { - BitStringBuilder out = new BitStringBuilder(); - out.append(bitString.substring(fromIndex, fromIndex + 17)); - out.append(new EncodableFixedIntegerRange().substring(bitString, fromIndex + 17)); - return out.build(); - } else { - return bitString.substring(fromIndex, fromIndex + 17 + max); - } - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/SubstringException.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/SubstringException.java deleted file mode 100644 index e9df8ca6..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/SubstringException.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -public class SubstringException extends Exception { - - private static final long serialVersionUID = 1825100490468259890L; - - public SubstringException(String msg) { - super(msg); - } - - public SubstringException(Exception e) { - super(e); - } - - public SubstringException(String msg, Exception e) { - super(msg, e); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 3284a23b..9e7380c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; public final class UnencodableBoolean extends AbstractEncodableBitStringDataType { @@ -18,11 +19,8 @@ public void encode(BitStringBuilder builder){ // pass } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { // pass } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - return BitString.empty(0); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index ebc2462d..ad3f2560 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoder { @@ -18,11 +19,7 @@ public static void encode(BitStringBuilder builder, Instant value) { } } - public static Instant decode(BitString bitString) throws DecodingException { - if (bitString.length() != 36) { - throw new DecodingException("Undecodable Datetime '" + bitString + "'"); - } - - return Instant.ofEpochMilli(FixedLongEncoder.decode(bitString) * 100L); + public static Instant decode(BitStringReader reader) throws DecodingException { + return Instant.ofEpochMilli(reader.readLong(36) * 100L); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index d0f7948a..5af3f7ac 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -50,13 +51,9 @@ public static void encode(BitStringBuilder builder, int value) { FixedIntegerEncoder.encode(builder, out, largestIndex + 1); } - public static int decode(BitString bitString) throws DecodingException { - return decode(bitString, 0, bitString.length()); - } - - public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { + public static int decode(BitString bitString, int start, int end) throws DecodingException { + int length = end - start; int limit = length - 1; - int end = fromIndex + length; // must not overflow and must end with "11" if (length < 2 || limit > FIBONACCI_LIMIT || !bitString.getValue(end - 2) || !bitString.getValue(end - 1)) { throw new DecodingException("Undecodable FibonacciInteger '" + bitString + "'"); @@ -64,7 +61,7 @@ public static int decode(BitString bitString, int fromIndex, int length) throws int value = 0; for (int i = 0; i < limit; i++) { - if (bitString.getValue(fromIndex + i)) { + if (bitString.getValue(start + i)) { value += FIBONACCI_NUMBERS[i]; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 95dbf869..bb8687c6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { @@ -47,38 +48,22 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitString bitString) throws DecodingException { - if (bitString.length() < 12) { - throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); - } - - int count = FixedIntegerEncoder.decode(bitString, 0, 12); + public static IntegerSet decode(BitStringReader reader) throws DecodingException { + int count = reader.readInt(12); IntegerSet value = new IntegerSet(); - int offset = 0; - int startIndex = 12; for (int i = 0; i < count; i++) { - boolean group = BooleanEncoder.decode(bitString, startIndex, 1); - startIndex++; - + boolean group = reader.readBool(); if (group) { - int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); - int start = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; + int start = reader.readFibonacci() + offset; offset = start; - startIndex = index + 2; - - index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); - int end = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; + int end = reader.readFibonacci() + offset; offset = end; - startIndex = index + 2; - value.addRange(start, end + 1); } else { - int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); - int val = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; + int val = reader.readFibonacci() + offset; offset = val; value.addInt(val); - startIndex = index + 2; } } return value; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 5a59decd..4ec13831 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; public class FixedBitfieldEncoder { private FixedBitfieldEncoder() {} @@ -11,8 +12,4 @@ public static void encode(BitStringBuilder builder, IntegerSet value, int bitStr BooleanEncoder.encode(builder, value.containsInt(i)); } } - - public static IntegerSet decode(BitString bitString) { - return bitString.toIntegerSet(); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index 6b7105ed..f130e6e3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -24,12 +24,12 @@ public static int decode(BitString bitString) throws DecodingException { return decode(bitString, 0, bitString.length()); } - public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { + public static int decode(BitString bitString, int from, int to) throws DecodingException { int value = 0; - int base = fromIndex + length - 1; + int length = to - from; for (int i = 0; i < length; i++) { - if (bitString.getValue(base - i)) { + if (bitString.getValue(to - (i + 1))) { value += 1 << i; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index e4ed367f..5f02b638 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,33 +29,11 @@ public static void encode(BitStringBuilder builder, List value, int ele } } - public static FixedIntegerList decode(BitString bitString, int elementBitStringLength, int numElements) { - FixedIntegerList out = new FixedIntegerList(numElements); - decode(out, bitString, elementBitStringLength, numElements); - return out; - } - - public static void decode(FixedIntegerList out, BitString bitString, int elementBitStringLength, int numElements) + public static void decode(FixedIntegerList out, BitStringReader reader, int elementBitStringLength) throws DecodingException { - int length = bitString.length(); - if (length > elementBitStringLength * numElements) { - throw new DecodingException("Undecodable FixedIntegerList '" + bitString + "'"); - } - - if (length % elementBitStringLength != 0) { - throw new DecodingException("Undecodable FixedIntegerList '" + bitString + "'"); - } - - bitString = bitString.expandTo(elementBitStringLength * numElements); - - length = bitString.length(); - int idx = 0; - for (int i = 0; i < length; i += elementBitStringLength) { - out.set(idx++, IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength))); - } - - while (idx < numElements) { - out.set(idx++, 0); + int size = out.size(); + for (int i = 0; i < size; i++) { + out.setInt(i, reader.readInt(elementBitStringLength)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index a399ba49..761d4dbc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { @@ -43,30 +44,17 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitString bitString) throws DecodingException { - if (bitString.length() < 12) { - throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); - } - - int count = FixedIntegerEncoder.decode(bitString, 0, 12); + public static IntegerSet decode(BitStringReader reader) throws DecodingException { + int count = reader.readInt(12); IntegerSet value = new IntegerSet(); - int startIndex = 12; for (int i = 0; i < count; i++) { - boolean group = BooleanEncoder.decode(bitString, startIndex, 1); - startIndex++; - + boolean group = reader.readBool(); if (group) { - int start = FixedIntegerEncoder.decode(bitString, startIndex, 16); - startIndex += 16; - - int end = FixedIntegerEncoder.decode(bitString, startIndex, 16); - startIndex += 16; - + int start = reader.readInt(16); + int end = reader.readInt(16); value.addRange(start, end + 1); } else { - int val = FixedIntegerEncoder.decode(bitString, startIndex, 16); - value.addInt(val); - startIndex += 16; + value.addInt(reader.readInt(16)); } } return value; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java index 9f0dba27..9f0c6ef5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java @@ -20,12 +20,12 @@ public static void encode(BitStringBuilder builder, long value, int bitStringLen } } - public static long decode(BitString bitString) throws DecodingException { + public static long decode(BitString bitString, int from, int to) throws DecodingException { long value = 0; - int length = bitString.length(); + int length = to - from; for (int i = 0; i < length; i++) { - if (bitString.getValue(length - (i + 1))) { + if (bitString.getValue(to - (i + 1))) { value += 1L << i; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 8c7784d0..a972acb0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -26,16 +27,10 @@ public static void encode(BitStringBuilder builder, String value, int stringLeng } } - public static String decode(BitString bitString) { - int length = bitString.length(); - if (length % 6 != 0) { - throw new DecodingException("Undecodable FixedString '" + bitString + "'"); - } - + public static String decode(BitStringReader reader, int length) { StringBuilder value = new StringBuilder(length); - for (int i = 0; i < length; i += 6) { - int code = FixedIntegerEncoder.decode(bitString, i, 6); + int code = reader.readInt(6); if (code == 63) { value.append(SPACE); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java deleted file mode 100644 index a0b8494e..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; - -public class OptimizedFibonacciRangeEncoder { - private OptimizedFibonacciRangeEncoder() {} - - public static void encode(BitStringBuilder builder, IntegerSet value) throws EncodingException { - // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way - // to identify in advance which will be shorter based on the array length and values - BitStringBuilder rangeBitString = new BitStringBuilder(); - int max = FibonacciIntegerRangeEncoder.encode(rangeBitString, value); - int rangeLength = rangeBitString.length(); - int bitFieldLength = max; - - if (rangeLength <= bitFieldLength) { - FixedIntegerEncoder.encode(builder, max, 16); - builder.append(true).append(rangeBitString); - } else { - FixedIntegerEncoder.encode(builder, max, 16); - builder.append(false); - for (int i = 0; i < max; i++) { - builder.append(value.contains(i + 1)); - } - } - } - - public static IntegerSet decode(BitString bitString) throws DecodingException { - if (bitString.length() < 12) { - throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); - } - - if (bitString.getValue(16)) { - return FibonacciIntegerRangeEncoder.decode(bitString.substring(17)); - } else { - BitString bits = bitString.substring(17); - int length = bits.length(); - IntegerSet value = new IntegerSet(); - for (int i = 0; i < length; i++) { - if (bits.getValue(i)) { - value.addInt(i + 1); - } - } - return value; - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 607ace29..82fb1379 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -27,23 +28,12 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerSet decode(BitString bitString) throws DecodingException { - if (bitString.length() < 12) { - throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); - } - - if (bitString.getValue(16)) { - return FixedIntegerRangeEncoder.decode(bitString.substring(17)); + public static IntegerSet decode(BitStringReader reader) throws DecodingException { + int size = reader.readInt(16); + if (reader.readBool()) { + return FixedIntegerRangeEncoder.decode(reader); } else { - BitString bits = bitString.substring(17); - int length = bits.length(); - IntegerSet value = new IntegerSet(); - for (int i = 0; i < length; i++) { - if (bits.getValue(i)) { - value.addInt(i + 1); - } - } - return value; + return reader.readIntegerSet(size); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 3212b317..eec00753 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -81,15 +81,15 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField // Necessary to maintain backwards compatibility when sensitive data processing changed from a // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the // DE, IA, NE, NH, NJ, TN release - if (bitString.length() == 66) { - BitStringBuilder builder = new BitStringBuilder(); - builder.append(bitString.substring(0, 48)); - builder.append(BitString.of("00000000")); - builder.append(bitString.substring(48, 52)); - builder.append(BitString.of("00")); - builder.append(bitString.substring(52, 62)); - bitString = builder.build(); - } +// if (bitString.length() == 66) { +// BitStringBuilder builder = new BitStringBuilder(); +// builder.append(bitString.substring(0, 48)); +// builder.append(BitString.of("00000000")); +// builder.append(bitString.substring(48, 52)); +// builder.append(BitString.of("00")); +// builder.append(bitString.substring(52, 62)); +// bitString = builder.build(); +// } bitStringEncoder.decode(bitString, fields); } catch (Exception e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java deleted file mode 100644 index cdecadc3..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableBooleanTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000000000000000000000000000000000000", - new EncodableDatetime().substring(BitString.of("10000000000000000000000000000000000001"), 1).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111111111111111111111111111111111111", - new EncodableDatetime().substring(BitString.of("01111111111111111111111111111111111110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java deleted file mode 100644 index bd9460b8..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; - -public class EncodableDatetimeTest { - - @Test - public void testSubstring1() throws DecodingException, SubstringException { - Assertions.assertEquals("000000000000000000000000000000000000", - new EncodableDatetime().substring(BitString.of("10000000000000000000000000000000000001"), 1).toString()); - } - - @Test - public void testSubstring2() throws DecodingException, SubstringException { - Assertions.assertEquals("111111111111111111111111111111111111", - new EncodableDatetime().substring(BitString.of("01111111111111111111111111111111111110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java deleted file mode 100644 index 76e5919b..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; - -public class EncodableFibonacciIntegerRangeTest { - - @Test - public void testSubstring1() throws DecodingException, SubstringException { - Assertions.assertEquals("0000000000100001110110011", - new EncodableFibonacciIntegerRange().substring(BitString.of("100000000001000011101100110"), 1).toString()); - } -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java deleted file mode 100644 index 17d98cfe..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableFixedBitfieldTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000", new EncodableFixedBitfield(3).substring(BitString.of("10001"), 1).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111", new EncodableFixedBitfield(3).substring(BitString.of("01110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java deleted file mode 100644 index 3cf83666..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableFixedIntegerListTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("1000", new EncodableFixedIntegerList(2, 2).substring(BitString.of("10001"), 0).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("1110", new EncodableFixedIntegerList(2, 2).substring(BitString.of("01110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index dc3e6cfc..638d19da 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -7,25 +7,12 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class EncodableFixedIntegerRangeTest { - @Test - public void testSubstring1() throws DecodingException, SubstringException { - Assertions.assertEquals("00000000001000000000000000011100000000000001010000000000001000", - new EncodableFixedIntegerRange().substring(BitString.of("1000000000010000000000000000111000000000000010100000000000010001"), - 1).toString()); - } - - @Test - public void testSubstring2() throws DecodingException, SubstringException { - Assertions.assertEquals("00000000000100000000000011101", new EncodableFixedIntegerRange().substring( - BitString.of("000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110110000000000010000000000001110100000000000000000000000000000"), - 230).toString()); - } - @Test public void testEncode1() throws EncodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); @@ -47,14 +34,14 @@ public void testEncode2() throws EncodingException { @Test public void testDecode1() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100")); + encodableFixedIntegerRange.decode(new BitStringReader(BitString.of("00000000000100000000000011100"))); Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.getValue()); } @Test public void testDecode2() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101")); + encodableFixedIntegerRange.decode(new BitStringReader(BitString.of("00000000000100000000000011101"))); Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.getValue()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java deleted file mode 100644 index 54a2c9cb..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableFixedIntegerTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000", new EncodableFixedInteger(3).substring(BitString.of("10001"), 1).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111", new EncodableFixedInteger(3).substring(BitString.of("01110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java deleted file mode 100644 index 77beabe3..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableFixedStringTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000000000000", new EncodableFixedString(2).substring(BitString.of("10000000000001"), 1).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111111111111", new EncodableFixedString(2).substring(BitString.of("01111111111110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 5cfc68b5..d73c6e91 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -7,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; public class EncodableOptimizedFixedRangeTest { @@ -47,39 +48,25 @@ public void testEncode4() { @Test public void testDecode1() { - encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001")); + encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"))); Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode2() { - encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001")); + encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("00000000000111100000000000000000001000000000001"))); Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode3() { - encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001")); + encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("000000000001110000000000000000000000000000001"))); Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode4() { - encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101")); + encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("0000000000011101100000000000100000000000011101"))); Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.getValue()); } - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000000000001110000000000000000000000000000001", encodableOptimizedFixedRange.substring( - BitString.of("000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000000000000000001000000000000000000000000000000"), - 213).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("0000000000011101100000000000100000000000011101", encodableOptimizedFixedRange.substring( - BitString.of("000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110110000000000010000000000001110100000000000000000000000000000"), - 213).toString()); - } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java index ac18fbd3..73f74cb9 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoderTest { @@ -16,7 +17,7 @@ public void test1() throws DecodingException { BitStringBuilder builder = new BitStringBuilder(); DatetimeEncoder.encode(builder, date1); String encodedDate1 = builder.build().toString(); - Instant date2 = DatetimeEncoder.decode(BitString.of(encodedDate1)); + Instant date2 = DatetimeEncoder.decode(new BitStringReader(BitString.of(encodedDate1))); Assertions.assertEquals((date1.toEpochMilli() / 100L) * 100L, date2.toEpochMilli()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 2f2c8520..9ff4c7db 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -66,45 +67,49 @@ public void testEncodeTooLarge() { FibonacciIntegerEncoder.encode(builder, Integer.MAX_VALUE)); } + private int decode(String str) { + return new BitStringReader(BitString.of(str)).readFibonacci(); + } + @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(1, FibonacciIntegerEncoder.decode(BitString.of("11"))); + Assertions.assertEquals(1, decode("11")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(2, FibonacciIntegerEncoder.decode(BitString.of("011"))); + Assertions.assertEquals(2, decode("011")); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(3, FibonacciIntegerEncoder.decode(BitString.of("0011"))); + Assertions.assertEquals(3, decode("0011")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(4, FibonacciIntegerEncoder.decode(BitString.of("1011"))); + Assertions.assertEquals(4, decode("1011")); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(5, FibonacciIntegerEncoder.decode(BitString.of("00011"))); + Assertions.assertEquals(5, decode("00011")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(6, FibonacciIntegerEncoder.decode(BitString.of("10011"))); + Assertions.assertEquals(6, decode("10011")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(7, FibonacciIntegerEncoder.decode(BitString.of("01011"))); + Assertions.assertEquals(7, decode("01011")); } @Test public void testDecode8() { try { - FibonacciIntegerEncoder.decode(BitString.of("110")); + decode("110"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -114,7 +119,7 @@ public void testDecode8() { @Test public void testDecode9() { try { - FibonacciIntegerEncoder.decode(BitString.of("1100")); + decode("1100"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -124,7 +129,7 @@ public void testDecode9() { @Test public void testDecode10() { try { - FibonacciIntegerEncoder.decode(BitString.of("0110000000")); + decode("0110000000"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -134,7 +139,7 @@ public void testDecode10() { @Test public void testDecodeTooLarge() { Assertions.assertThrows(DecodingException.class, () -> - FibonacciIntegerEncoder.decode(BitString.of("0001010001000101001000001001000100001000100011"))); + decode("0001010001000101001000001001000100001000100011")); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index 0579095b..2c71713c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -8,6 +8,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoderTest { @@ -62,43 +63,47 @@ public void testEncode7() { FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12)); Assertions.assertEquals("00000000001000111001101011", builder.build().toString()); } + + private IntegerSet decode(String str) { + return FibonacciIntegerRangeEncoder.decode(new BitStringReader(BitString.of(str))); + } @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(Set.of(), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000000"))); + Assertions.assertEquals(Set.of(), decode("000000000000")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(Set.of(2), FibonacciIntegerRangeEncoder.decode(BitString.of("0000000000010011"))); + Assertions.assertEquals(Set.of(2), decode("0000000000010011")); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), FibonacciIntegerRangeEncoder.decode(BitString.of("00000000000110111011"))); + Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), decode("00000000000110111011")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(Set.of(2, 5, 6, 7), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000010001110011011"))); + Assertions.assertEquals(Set.of(2, 5, 6, 7), decode("000000000010001110011011")); } @Test public void testDecode5() throws DecodingException { Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), - FibonacciIntegerRangeEncoder.decode(BitString.of("0000000000100001110110011"))); + decode("0000000000100001110110011")); } @Test public void testDecode6() throws DecodingException { Assertions.assertEquals(Set.of(2, 5, 6, 7, 8, 9, 10, 11, 12), - FibonacciIntegerRangeEncoder.decode(BitString.of("00000000001000111001101011"))); + decode("00000000001000111001101011")); } @Test public void testDecode7() { try { - FibonacciIntegerRangeEncoder.decode(BitString.of("0011")); + decode("0011"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -108,7 +113,7 @@ public void testDecode7() { @Test public void testDecode8() { try { - FibonacciIntegerRangeEncoder.decode(BitString.of("000000000002")); + decode("000000000002"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 1a18454f..23fdf263 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedBitfieldEncoderTest { @@ -87,45 +88,49 @@ public void testEncode9() { Assertions.assertEquals(Set.of(0,1,2,3,4), set); } + private IntegerSet decode(String str) { + return new BitStringReader(BitString.of(str)).readIntegerSet(str.length()); + } + @Test public void testDecode1() { - Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of(""))); + Assertions.assertEquals(Set.of(), decode("")); } @Test public void testDecode2() { - Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of("0"))); + Assertions.assertEquals(Set.of(), decode("0")); } @Test public void testDecode3() { - Assertions.assertEquals(Set.of(1), FixedBitfieldEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(Set.of(1), decode("1")); } @Test public void testDecode4() { - Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of("00"))); + Assertions.assertEquals(Set.of(), decode("00")); } @Test public void testDecode5() { - Assertions.assertEquals(Set.of(2), FixedBitfieldEncoder.decode(BitString.of("01"))); + Assertions.assertEquals(Set.of(2), decode("01")); } @Test public void testDecode6() { - Assertions.assertEquals(Set.of(1), FixedBitfieldEncoder.decode(BitString.of("10"))); + Assertions.assertEquals(Set.of(1), decode("10")); } @Test public void testDecode7() { - Assertions.assertEquals(Set.of(1, 2), FixedBitfieldEncoder.decode(BitString.of("11"))); + Assertions.assertEquals(Set.of(1, 2), decode("11")); } @Test public void testDecode8() { try { - FixedBitfieldEncoder.decode(BitString.of("2")); + decode("2"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index 676c46e6..c4d75447 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -56,38 +57,42 @@ public void testEncode6() { } } + private int decode(String str) { + return new BitStringReader(BitString.of(str)).readInt(str.length()); + } + @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, FixedIntegerEncoder.decode(BitString.of(""))); + Assertions.assertEquals(0, decode("")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(0, FixedIntegerEncoder.decode(BitString.of("0"))); + Assertions.assertEquals(0, decode("0")); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(0, FixedIntegerEncoder.decode(BitString.of("000000"))); + Assertions.assertEquals(0, decode("000000")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(1, FixedIntegerEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(1, decode("1")); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(1, FixedIntegerEncoder.decode(BitString.of("000001"))); + Assertions.assertEquals(1, decode("000001")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(8, FixedIntegerEncoder.decode(BitString.of("1000"))); + Assertions.assertEquals(8, decode("1000")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(8, FixedIntegerEncoder.decode(BitString.of("0000001000"))); + Assertions.assertEquals(8, decode("0000001000")); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 16a70ff4..365ea4de 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -7,6 +7,8 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -149,95 +151,101 @@ public void testEncode19() { } } + private FixedIntegerList decode(String str) { + FixedIntegerList out = new FixedIntegerList(2); + FixedIntegerListEncoder.decode(out, new BitStringReader(BitString.of(str)), 2); + return out; + } + @Test public void testDecode1() { - Assertions.assertEquals(Arrays.asList(0, 0), FixedIntegerListEncoder.decode(BitString.of(""), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 0), decode("")); } @Test public void testDecode2() { - Assertions.assertEquals(Arrays.asList(0, 0), FixedIntegerListEncoder.decode(BitString.of("0000"), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 0), decode("0000")); } @Test public void testDecode3() { - Assertions.assertEquals(Arrays.asList(0, 1), FixedIntegerListEncoder.decode(BitString.of("0001"), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 1), decode("0001")); } @Test public void testDecode4() { - Assertions.assertEquals(Arrays.asList(0, 2), FixedIntegerListEncoder.decode(BitString.of("0010"), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 2), decode("0010")); } @Test public void testDecode5() { - Assertions.assertEquals(Arrays.asList(0, 3), FixedIntegerListEncoder.decode(BitString.of("0011"), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 3), decode("0011")); } @Test public void testDecode6() { - Assertions.assertEquals(Arrays.asList(1, 0), FixedIntegerListEncoder.decode(BitString.of("0100"), 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 0), decode("0100")); } @Test public void testDecode7() { - Assertions.assertEquals(Arrays.asList(1, 1), FixedIntegerListEncoder.decode(BitString.of("0101"), 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 1), decode("0101")); } @Test public void testDecode8() { - Assertions.assertEquals(Arrays.asList(1, 2), FixedIntegerListEncoder.decode(BitString.of("0110"), 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 2), decode("0110")); } @Test public void testDecode9() { - Assertions.assertEquals(Arrays.asList(1, 3), FixedIntegerListEncoder.decode(BitString.of("0111"), 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 3), decode("0111")); } @Test public void testDecode10() { - Assertions.assertEquals(Arrays.asList(2, 0), FixedIntegerListEncoder.decode(BitString.of("1000"), 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 0), decode("1000")); } @Test public void testDecode11() { - Assertions.assertEquals(Arrays.asList(2, 1), FixedIntegerListEncoder.decode(BitString.of("1001"), 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 1), decode("1001")); } @Test public void testDecode12() { - Assertions.assertEquals(Arrays.asList(2, 2), FixedIntegerListEncoder.decode(BitString.of("1010"), 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 2), decode("1010")); } @Test public void testDecode13() { - Assertions.assertEquals(Arrays.asList(2, 3), FixedIntegerListEncoder.decode(BitString.of("1011"), 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 3), decode("1011")); } @Test public void testDecode14() { - Assertions.assertEquals(Arrays.asList(3, 0), FixedIntegerListEncoder.decode(BitString.of("1100"), 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 0), decode("1100")); } @Test public void testDecode15() { - Assertions.assertEquals(Arrays.asList(3, 1), FixedIntegerListEncoder.decode(BitString.of("1101"), 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 1), decode("1101")); } @Test public void testDecode16() { - Assertions.assertEquals(Arrays.asList(3, 2), FixedIntegerListEncoder.decode(BitString.of("1110"), 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 2), decode("1110")); } @Test public void testDecode17() { - Assertions.assertEquals(Arrays.asList(3, 3), FixedIntegerListEncoder.decode(BitString.of("1111"), 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 3), decode("1111")); } @Test public void testDecode18() { try { - FixedIntegerListEncoder.decode(BitString.of("111111"), 2, 2); + decode("111111"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -247,7 +255,7 @@ public void testDecode18() { @Test public void testDecode19() { try { - FixedIntegerListEncoder.decode(BitString.of("2"), 2, 2); + decode("2"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -257,7 +265,7 @@ public void testDecode19() { @Test public void testDecode20() { try { - FixedIntegerListEncoder.decode(BitString.of("111"), 2, 2); + decode("111"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 7f187b7a..da47b3a5 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -8,6 +8,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoderTest { @@ -85,56 +86,59 @@ public void testEncode9() { builder.build().toString()); } + private IntegerSet decode(String str) { + return FixedIntegerRangeEncoder.decode(new BitStringReader(BitString.of(str))); + } + @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(Set.of(), FixedIntegerRangeEncoder.decode(BitString.of("000000000000"))); + Assertions.assertEquals(Set.of(), decode("000000000000")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(Set.of(2), FixedIntegerRangeEncoder.decode(BitString.of("00000000000100000000000000010"))); + Assertions.assertEquals(Set.of(2), decode("00000000000100000000000000010")); } @Test public void testDecode3() throws DecodingException { Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), - FixedIntegerRangeEncoder.decode(BitString.of("000000000001100000000000000100000000000000110"))); + decode("000000000001100000000000000100000000000000110")); } @Test public void testDecode4() throws DecodingException { Assertions.assertEquals(Set.of(2, 5, 6, 7), - FixedIntegerRangeEncoder.decode(BitString.of("00000000001000000000000000010100000000000001010000000000000111"))); + decode("00000000001000000000000000010100000000000001010000000000000111")); } @Test public void testDecode5() throws DecodingException { Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), - FixedIntegerRangeEncoder.decode(BitString.of("00000000001000000000000000011100000000000001010000000000001000"))); + decode("00000000001000000000000000011100000000000001010000000000001000")); } @Test public void testDecode6() throws DecodingException { Assertions.assertEquals(Set.of(12, 24, 48), - FixedIntegerRangeEncoder.decode(BitString.of("000000000011000000000000011000000000000001100000000000000110000"))); + decode("000000000011000000000000011000000000000001100000000000000110000")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(Set.of(12, 24, 48, 49), FixedIntegerRangeEncoder - .decode(BitString.of("0000000000110000000000000110000000000000011000100000000001100000000000000110001"))); + Assertions.assertEquals(Set.of(12, 24, 48, 49), decode("0000000000110000000000000110000000000000011000100000000001100000000000000110001")); } @Test public void testDecode8() throws DecodingException { - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), FixedIntegerRangeEncoder.decode( - BitString.of("00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010"))); + Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), decode( + "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010")); } @Test public void testDecode9() { try { - FixedIntegerRangeEncoder.decode(BitString.of("0011")); + decode("0011"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -144,7 +148,7 @@ public void testDecode9() { @Test public void testDecode10() { try { - FixedIntegerRangeEncoder.decode(BitString.of("000000000002")); + decode("000000000002"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index 653e5066..fc1fde0a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -64,43 +65,47 @@ public void testEncode7() { } } + private long decode(String str) { + return new BitStringReader(BitString.of(str)).readLong(str.length()); + } + @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, FixedLongEncoder.decode(BitString.of(""))); + Assertions.assertEquals(0, decode("")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(0, FixedLongEncoder.decode(BitString.of("0"))); + Assertions.assertEquals(0, decode("0")); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(0, FixedLongEncoder.decode(BitString.of("000000"))); + Assertions.assertEquals(0, decode("000000")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(1, FixedLongEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(1, decode("1")); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(1, FixedLongEncoder.decode(BitString.of("000001"))); + Assertions.assertEquals(1, decode("000001")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(16630898421L, FixedLongEncoder.decode(BitString.of("001111011111010001110101111011110101"))); + Assertions.assertEquals(16630898421L, decode("001111011111010001110101111011110101")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(8, FixedLongEncoder.decode(BitString.of("1000"))); + Assertions.assertEquals(8, decode("1000")); } @Test public void testDecode8() throws DecodingException { - Assertions.assertEquals(8, FixedLongEncoder.decode(BitString.of("0000001000"))); + Assertions.assertEquals(8, decode("0000001000")); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index bc904371..a7604730 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -35,20 +36,24 @@ public void testEncode3() { } } + private String decode(String str) { + return FixedStringEncoder.decode(new BitStringReader(BitString.of(str)), str.length()); + } + @Test public void testDecode1() { - Assertions.assertEquals("AB", FixedStringEncoder.decode(BitString.of("000000000001"))); + Assertions.assertEquals("AB", decode("000000000001")); } @Test public void testDecode2() { - Assertions.assertEquals("a", FixedStringEncoder.decode(BitString.of("100000111111"))); + Assertions.assertEquals("a", decode("100000111111")); } @Test public void testDecode3() { try { - FixedStringEncoder.decode(BitString.of("2")); + decode("2"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { From 3ab0e441fd407bc5322312fdca14a437b212d1ad Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 15 Jan 2026 18:54:02 -0500 Subject: [PATCH 056/146] fix tests --- .../base64/AbstractBase64UrlEncoder.java | 2 +- .../iab/gpp/encoder/bitstring/BitString.java | 3 ++ .../encoder/FibonacciIntegerEncoder.java | 5 ++-- .../datatype/encoder/FixedStringEncoder.java | 2 +- .../encoder/FibonacciIntegerEncoderTest.java | 30 ------------------- .../encoder/FixedIntegerListEncoderTest.java | 17 +---------- .../encoder/FixedStringEncoderTest.java | 2 +- 7 files changed, 10 insertions(+), 51 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index eacd934d..d0c508c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -35,7 +35,7 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { int index = 0; while (index <= length - BASE64_BITS) { try { - int n = FixedIntegerEncoder.decode(bitString, index, BASE64_BITS); + int n = FixedIntegerEncoder.decode(bitString, index, index + BASE64_BITS); str.append(DICT.charAt(n)); index += BASE64_BITS; } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index c12d7132..1220c31d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -48,6 +48,9 @@ public String toString() { } public boolean getValue(int i) { + if (i >= length) { + throw new DecodingException("faile"); + } return bitSet.get(i); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 5af3f7ac..a65d93c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -55,7 +55,8 @@ public static int decode(BitString bitString, int start, int end) throws Decodin int length = end - start; int limit = length - 1; // must not overflow and must end with "11" - if (length < 2 || limit > FIBONACCI_LIMIT || !bitString.getValue(end - 2) || !bitString.getValue(end - 1)) { + if (length < 2 || limit > FIBONACCI_LIMIT || !bitString.getValue(end - 2) + || !bitString.getValue(end - 1)) { throw new DecodingException("Undecodable FibonacciInteger '" + bitString + "'"); } @@ -86,6 +87,6 @@ public static int indexOfEndTag(BitString bitString, int fromIndex) { i++; } } - return -1; + throw new DecodingException("fadf"); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index a972acb0..f721c8a5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -29,7 +29,7 @@ public static void encode(BitStringBuilder builder, String value, int stringLeng public static String decode(BitStringReader reader, int length) { StringBuilder value = new StringBuilder(length); - for (int i = 0; i < length; i += 6) { + for (int i = 0; i < length; i++) { int code = reader.readInt(6); if (code == 63) { value.append(SPACE); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 9ff4c7db..060a25c1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -106,36 +106,6 @@ public void testDecode7() throws DecodingException { Assertions.assertEquals(7, decode("01011")); } - @Test - public void testDecode8() { - try { - decode("110"); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode9() { - try { - decode("1100"); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode10() { - try { - decode("0110000000"); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - @Test public void testDecodeTooLarge() { Assertions.assertThrows(DecodingException.class, () -> diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 365ea4de..2144dbe5 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -150,17 +150,12 @@ public void testEncode19() { } } - + private FixedIntegerList decode(String str) { FixedIntegerList out = new FixedIntegerList(2); FixedIntegerListEncoder.decode(out, new BitStringReader(BitString.of(str)), 2); return out; } - - @Test - public void testDecode1() { - Assertions.assertEquals(Arrays.asList(0, 0), decode("")); - } @Test public void testDecode2() { @@ -242,16 +237,6 @@ public void testDecode17() { Assertions.assertEquals(Arrays.asList(3, 3), decode("1111")); } - @Test - public void testDecode18() { - try { - decode("111111"); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - @Test public void testDecode19() { try { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index a7604730..970c99bc 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -37,7 +37,7 @@ public void testEncode3() { } private String decode(String str) { - return FixedStringEncoder.decode(new BitStringReader(BitString.of(str)), str.length()); + return FixedStringEncoder.decode(new BitStringReader(BitString.of(str)), str.length() / 6); } @Test From 35ace8dde837dae87ca88d22330d7e5f8cb24c7a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 15 Jan 2026 19:05:40 -0500 Subject: [PATCH 057/146] fix copy --- .../encoder/bitstring/BitStringBuilder.java | 14 +++++++++++--- .../gpp/encoder/segment/UsNatCoreSegment.java | 19 ++++++++++--------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java index bf780ff4..275a4371 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java @@ -17,6 +17,11 @@ public BitStringBuilder() { public BitString build() { return new BitString(bitSet, length); } + + public BitStringBuilder extend(int length) { + this.length += length; + return this; + } public BitStringBuilder append(boolean value) { int idx = length++; @@ -26,14 +31,17 @@ public BitStringBuilder append(boolean value) { return this; } - public BitStringBuilder append(BitString other) { - int otherLength = other.length(); - for (int i = 0; i < otherLength; i++) { + public BitStringBuilder append(BitString other, int from, int to) { + for (int i = from; i < to; i++) { append(other.getValue(i)); } return this; } + public BitStringBuilder append(BitString other) { + return append(other, 0, other.length()); + } + public int length() { return length; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index eec00753..e5e60e3e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -81,15 +81,16 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField // Necessary to maintain backwards compatibility when sensitive data processing changed from a // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the // DE, IA, NE, NH, NJ, TN release -// if (bitString.length() == 66) { -// BitStringBuilder builder = new BitStringBuilder(); -// builder.append(bitString.substring(0, 48)); -// builder.append(BitString.of("00000000")); -// builder.append(bitString.substring(48, 52)); -// builder.append(BitString.of("00")); -// builder.append(bitString.substring(52, 62)); -// bitString = builder.build(); -// } + if (bitString.length() == 66) { + BitStringBuilder builder = new BitStringBuilder(); + + builder.append(bitString, 0, 48); + builder.extend(8); + builder.append(bitString, 48, 52); + builder.extend(2); + builder.append(bitString, 52, 62); + bitString = builder.build(); + } bitStringEncoder.decode(bitString, fields); } catch (Exception e) { From ed4581a94b70029752e9fabdbb3712ee1cbd47aa Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 16 Jan 2026 12:37:27 -0500 Subject: [PATCH 058/146] own bitset --- .../com/iab/gpp/encoder/bitstring/BitSet.java | 101 ++++++++++++++++++ .../iab/gpp/encoder/bitstring/BitString.java | 1 - .../encoder/datatype/encoder/IntegerSet.java | 8 +- 3 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java new file mode 100644 index 00000000..78a29bc2 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -0,0 +1,101 @@ +package com.iab.gpp.encoder.bitstring; + +import java.util.Arrays; +import com.iab.gpp.encoder.error.DecodingException; + +// a thin version of java.util.BitSet +public final class BitSet { + + private static final int ADDRESS_BITS_PER_WORD = 6; + private static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; + + /* Used to shift left or right for a partial word mask */ + private static final long WORD_MASK = 0xffffffffffffffffL; + + private long[] words; + + public BitSet(int initialCapacity) { + this.words = new long[wordIndex(initialCapacity) + 1]; + } + + public BitSet() { + this(0); + } + + private static int wordIndex(int index) { + if (index < 0) { + throw new DecodingException("got negative word index"); + } + return index >> ADDRESS_BITS_PER_WORD; + } + + private long[] ensureIndex(int wordIndex) { + long[] words = this.words; + int wordsUsed = words.length; + if (wordIndex >= wordsUsed) { + int request = Math.max(2 * wordsUsed, wordIndex + 1); + words = Arrays.copyOf(words, request); + this.words = words; + } + return words; + } + + public boolean get(int index) { + int wordIndex = wordIndex(index); + long[] words = this.words; + return (wordIndex < words.length) + && ((words[wordIndex] & (1L << index)) != 0); + } + + public void clear(int from, int to) { + for (int i = from; i < to; i++) { + clear(i); + } + } + + public void clear(int bitIndex) { + int wordIndex = wordIndex(bitIndex); + long[] words = this.words; + if (wordIndex < words.length) { + words[wordIndex] &= ~(1L << bitIndex); + } + } + + public int nextSetBit(int fromIndex) { + long[] words = this.words; + int wordsInUse = words.length; + int u = wordIndex(fromIndex); + if (u >= wordsInUse) { + return -1; + } + + long word = words[u] & (WORD_MASK << fromIndex); + + while (true) { + if (word != 0) { + return (u * BITS_PER_WORD) + Long.numberOfTrailingZeros(word); + } + if (++u == wordsInUse) { + return -1; + } + word = words[u]; + } + } + + public void set(int from, int to) { + for (int i = from; i < to; i++) { + set(i); + } + } + + public void set(int bitIndex) { + int wordIndex = wordIndex(bitIndex); + long[] words = ensureIndex(wordIndex); + words[wordIndex] |= (1L << bitIndex); + } + + public void appendLong(int bitIndex, long value, int bits) { + + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 1220c31d..a8962d65 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.bitstring; -import java.util.BitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 340252e8..241cbf00 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.AbstractSet; -import java.util.BitSet; import java.util.Collection; import java.util.NoSuchElementException; import java.util.Spliterator; @@ -10,6 +9,7 @@ import java.util.logging.Logger; import java.util.stream.IntStream; import java.util.stream.StreamSupport; +import com.iab.gpp.encoder.bitstring.BitSet; /** * An optimized implementation of {@literal Set} backed by a {@link java.util.BitSet}. @@ -34,7 +34,7 @@ public IntegerSet(BitSet bitSet, int from, int to, int adjustment) { } public IntegerSet(int limit) { - this(new BitSet(0), 0, limit, 0); + this(new BitSet(), 0, limit, 0); } public IntegerSet() { @@ -146,7 +146,7 @@ public boolean addInt(int value) { if (present) { return false; } - bitSet.set(offset, true); + bitSet.set(offset); dirty = true; return true; } @@ -161,7 +161,7 @@ public boolean removeInt(int value) { if (!present) { return false; } - bitSet.set(offset, false); + bitSet.clear(offset); dirty = true; return true; } From ec6b366167a49d48e934ed14caed3958d8f2e3dc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 16 Jan 2026 15:07:15 -0500 Subject: [PATCH 059/146] wip --- .../base64/AbstractBase64UrlEncoder.java | 28 ++++++++++++------- .../com/iab/gpp/encoder/bitstring/BitSet.java | 16 +++++------ .../iab/gpp/encoder/bitstring/BitString.java | 2 +- .../encoder/bitstring/BitStringBuilder.java | 5 ---- .../TraditionalBase64UrlEncoderTest.java | 21 +------------- 5 files changed, 28 insertions(+), 44 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index d0c508c2..8a0243f3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -1,5 +1,7 @@ package com.iab.gpp.encoder.base64; +import java.util.Arrays; +import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; @@ -17,12 +19,11 @@ public abstract class AbstractBase64UrlEncoder { */ private static final String DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; private static final int REVERSE_DICT_SIZE = 128; - private static final BitString[] REVERSE_DICT = new BitString[REVERSE_DICT_SIZE]; + private static final long[] REVERSE_DICT = new long[REVERSE_DICT_SIZE]; static { + Arrays.fill(REVERSE_DICT, -1); for (int i = 0; i < DICT.length(); i++) { - BitStringBuilder builder = new BitStringBuilder(); - FixedIntegerEncoder.encode(builder, i, 6); - REVERSE_DICT[DICT.charAt(i)] = builder.build(); + REVERSE_DICT[DICT.charAt(i)] = Long.reverse(i) >>> -6; } } @@ -48,19 +49,26 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { public BitString decode(CharSequence str) { int length = str.length(); - BitStringBuilder sb = new BitStringBuilder(length * BASE64_BITS); + int bitLength = length * BASE64_BITS; + long [] words = new long[bitLength / BitSet.BITS_PER_WORD + 1]; + int bitIndex = 0; for (int i = 0; i < length; i++) { char c = str.charAt(i); - BitString n = null; + long n = -1; if (c < REVERSE_DICT_SIZE) { n = REVERSE_DICT[c]; } - if (n == null) { + if (n < 0) { throw new DecodingException("Undecodable Base64URL string"); } - sb.append(n); - + int wordIndex = BitSet.wordIndex(bitIndex); + words[wordIndex] |= (n << bitIndex); + int nextWordIndex = BitSet.wordIndex(bitIndex + BASE64_BITS); + if(wordIndex != nextWordIndex) { + words[nextWordIndex] = n >>> (BitSet.BITS_PER_WORD - bitIndex); + } + bitIndex += 6; } - return sb.build(); + return new BitString(new BitSet(words), bitLength); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 78a29bc2..56cdc0fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,28 +1,33 @@ package com.iab.gpp.encoder.bitstring; import java.util.Arrays; +import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.error.DecodingException; // a thin version of java.util.BitSet public final class BitSet { private static final int ADDRESS_BITS_PER_WORD = 6; - private static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; + public static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; /* Used to shift left or right for a partial word mask */ private static final long WORD_MASK = 0xffffffffffffffffL; private long[] words; + public BitSet(long[] words) { + this.words = words; + } + public BitSet(int initialCapacity) { - this.words = new long[wordIndex(initialCapacity) + 1]; + this(new long[wordIndex(initialCapacity) + 1]); } public BitSet() { this(0); } - private static int wordIndex(int index) { + public static int wordIndex(int index) { if (index < 0) { throw new DecodingException("got negative word index"); } @@ -93,9 +98,4 @@ public void set(int bitIndex) { long[] words = ensureIndex(wordIndex); words[wordIndex] |= (1L << bitIndex); } - - public void appendLong(int bitIndex, long value, int bits) { - - } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index a8962d65..5998d632 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -12,7 +12,7 @@ public final class BitString { private final BitSet bitSet; private final int length; - BitString(BitSet bitSet, int length) { + public BitString(BitSet bitSet, int length) { this.bitSet = bitSet; this.length = length; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java index 275a4371..dc42e85b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.bitstring; -import java.util.BitSet; public final class BitStringBuilder { private final BitSet bitSet; @@ -38,10 +37,6 @@ public BitStringBuilder append(BitString other, int from, int to) { return this; } - public BitStringBuilder append(BitString other) { - return append(other, 0, other.length()); - } - public int length() { return length; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index 02985a7e..52a02e9c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -9,26 +9,7 @@ public class TraditionalBase64UrlEncoderTest { private TraditionalBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - @Test - public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); - builder.append(BitString.of("0000110000010000000000010011")); - Assertions.assertEquals("DBABMAAA", base64UrlEncoder.encode(builder).toString()); - } - - @Test - public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); - builder.append(BitString.of("000011000001000000000010001101011")); - Assertions.assertEquals("DBACNYAA", base64UrlEncoder.encode(builder).toString()); - } - - @Test - public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); - builder.append(BitString.of("00001100000100000000000110001111")); - Assertions.assertEquals("DBABjwAA", base64UrlEncoder.encode(builder).toString()); - } + @Test public void testDecode1() { From c7cc6b696d81040e0de0dbfd87ef2e1c412870a1 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 16 Jan 2026 15:25:18 -0500 Subject: [PATCH 060/146] remove imports --- .../src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java | 1 - .../encoder/datatype/AbstractEncodableBitStringDataType.java | 1 - .../java/com/iab/gpp/encoder/datatype/EncodableBoolean.java | 1 - .../java/com/iab/gpp/encoder/datatype/EncodableDatetime.java | 1 - .../iab/gpp/encoder/datatype/EncodableFibonacciInteger.java | 1 - .../gpp/encoder/datatype/EncodableFibonacciIntegerRange.java | 3 --- .../com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java | 1 - .../com/iab/gpp/encoder/datatype/EncodableFixedInteger.java | 1 - .../iab/gpp/encoder/datatype/EncodableFixedIntegerList.java | 1 - .../iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java | 2 -- .../com/iab/gpp/encoder/datatype/EncodableFixedString.java | 1 - .../iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java | 1 - .../iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java | 2 -- .../java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java | 1 - .../com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java | 1 - .../gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java | 1 - .../encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java | 1 - .../iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java | 2 -- .../gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java | 1 - .../gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java | 1 - .../iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java | 2 -- .../encoder/datatype/encoder/OptimizedFixedRangeEncoder.java | 1 - 22 files changed, 28 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 56cdc0fa..3c9f4b92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.bitstring; import java.util.Arrays; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.error.DecodingException; // a thin version of java.util.BitSet diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 5510871c..76e38bc5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -4,7 +4,6 @@ import java.util.function.Predicate; import java.util.stream.Collectors; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; public abstract class AbstractEncodableBitStringDataType implements EncodableDataType { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index df96560b..20a66fb4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index bf677028..49e61af4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -2,7 +2,6 @@ import java.time.Instant; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 02924acf..850bdff2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 6a36ad6b..1251b8b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -1,12 +1,9 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 9d328753..af670eb5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 5d9beb20..d4ba3426 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 7d95c260..e0913e61 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -2,7 +2,6 @@ import java.util.List; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index c53bf0e0..01411792 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -1,10 +1,8 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 36b54442..c41794c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 31a56bed..7b983090 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -3,7 +3,6 @@ import java.util.Collection; import java.util.function.IntSupplier; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index ee918f97..12858d8f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -1,10 +1,8 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 9e7380c3..b4947777 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index ad3f2560..ed83bb99 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -2,7 +2,6 @@ import java.time.Instant; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index a65d93c9..ef9f0e70 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -2,7 +2,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index bb8687c6..beef3289 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 4ec13831..5b5b0b3d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; public class FixedBitfieldEncoder { private FixedBitfieldEncoder() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 5f02b638..d21dfc71 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -2,7 +2,6 @@ import java.util.List; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.FixedIntegerList; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 761d4dbc..0b12b0ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index f721c8a5..2b6f3cee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedStringEncoder { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 82fb1379..c264e91a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; From 22b1caa8bb5699d73b274a48b537f4874fd84c08 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 09:52:52 -0500 Subject: [PATCH 061/146] style --- .../base64/AbstractBase64UrlEncoder.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 8a0243f3..0ab2a6d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -13,6 +13,7 @@ public abstract class AbstractBase64UrlEncoder { protected abstract void pad(BitStringBuilder bitString); private static final int BASE64_BITS = 6; + private static final long NO_SYMBOL = -1; /** * Base 64 URL character set. Different from standard Base64 char set in that '+' and '/' are * replaced with '-' and '_'. @@ -21,9 +22,12 @@ public abstract class AbstractBase64UrlEncoder { private static final int REVERSE_DICT_SIZE = 128; private static final long[] REVERSE_DICT = new long[REVERSE_DICT_SIZE]; static { - Arrays.fill(REVERSE_DICT, -1); + Arrays.fill(REVERSE_DICT, NO_SYMBOL); for (int i = 0; i < DICT.length(); i++) { - REVERSE_DICT[DICT.charAt(i)] = Long.reverse(i) >>> -6; + // NOTE: the bit string is stored in a long[] and read from LSB to MSB + // but each base64 digit is read from MSB to LSB + // so they need to be reversed. + REVERSE_DICT[DICT.charAt(i)] = Long.reverse(i) >>> -BASE64_BITS; } } @@ -54,20 +58,21 @@ public BitString decode(CharSequence str) { int bitIndex = 0; for (int i = 0; i < length; i++) { char c = str.charAt(i); - long n = -1; + long n = NO_SYMBOL; if (c < REVERSE_DICT_SIZE) { n = REVERSE_DICT[c]; } - if (n < 0) { + if (n == NO_SYMBOL) { throw new DecodingException("Undecodable Base64URL string"); } int wordIndex = BitSet.wordIndex(bitIndex); words[wordIndex] |= (n << bitIndex); - int nextWordIndex = BitSet.wordIndex(bitIndex + BASE64_BITS); + int nextBitIndex = bitIndex + BASE64_BITS; + int nextWordIndex = BitSet.wordIndex(nextBitIndex); if(wordIndex != nextWordIndex) { words[nextWordIndex] = n >>> (BitSet.BITS_PER_WORD - bitIndex); } - bitIndex += 6; + bitIndex = nextBitIndex; } return new BitString(new BitSet(words), bitLength); } From e966b1efc984923e2f4acc969805ab437f1b189c Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 20:56:59 -0500 Subject: [PATCH 062/146] optimize fibonacci --- .../iab/gpp/encoder/bitstring/BitString.java | 2 +- .../encoder/bitstring/BitStringReader.java | 21 +++++++-- .../encoder/FibonacciIntegerEncoder.java | 45 +------------------ 3 files changed, 20 insertions(+), 48 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 5998d632..f5cbe555 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -48,7 +48,7 @@ public String toString() { public boolean getValue(int i) { if (i >= length) { - throw new DecodingException("faile"); + throw new DecodingException("Bit string access out of range"); } return bitSet.get(i); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java index 1869e76a..634941ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.error.DecodingException; public final class BitStringReader { @@ -33,10 +34,22 @@ public boolean readBool() { } public int readFibonacci() { - int indexOfEndTag = FibonacciIntegerEncoder.indexOfEndTag(bitString, offset) + 2; - int out = FibonacciIntegerEncoder.decode(bitString, offset, indexOfEndTag); - offset = indexOfEndTag; - return out; + int value = 0; + int offset = this.offset; + for (int i = 0; i < FibonacciIntegerEncoder.FIBONACCI_LIMIT; i++) { + if (bitString.getValue(offset + i)) { + // 1X + value += FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]; + i++; + int next = offset + i; + if (bitString.getValue(next)) { + // 11 + this.offset = next + 1; + return value; + } + } + } + throw new DecodingException("Invalid FibonacciInteger"); } public IntegerSet readIntegerSet(int length) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index ef9f0e70..869d287d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FibonacciIntegerEncoder { @@ -10,8 +8,8 @@ private FibonacciIntegerEncoder() {} // this is the length of the longest fibonacci encoded string of all 1's // which does not overflow a 32-bit integer - private static final int FIBONACCI_LIMIT = 42; - private static final int[] FIBONACCI_NUMBERS = new int[FIBONACCI_LIMIT]; + public static final int FIBONACCI_LIMIT = 42; + public static final int[] FIBONACCI_NUMBERS = new int[FIBONACCI_LIMIT]; static { for (int i = 0; i < FIBONACCI_LIMIT; i++) { if (i == 0) { @@ -49,43 +47,4 @@ public static void encode(BitStringBuilder builder, int value) { } FixedIntegerEncoder.encode(builder, out, largestIndex + 1); } - - public static int decode(BitString bitString, int start, int end) throws DecodingException { - int length = end - start; - int limit = length - 1; - // must not overflow and must end with "11" - if (length < 2 || limit > FIBONACCI_LIMIT || !bitString.getValue(end - 2) - || !bitString.getValue(end - 1)) { - throw new DecodingException("Undecodable FibonacciInteger '" + bitString + "'"); - } - - int value = 0; - for (int i = 0; i < limit; i++) { - if (bitString.getValue(start + i)) { - value += FIBONACCI_NUMBERS[i]; - } - } - return value; - } - - public static int indexOfEndTag(BitString bitString, int fromIndex) { - int limit = bitString.length() - 1; - int i = fromIndex; - while (i < limit) { - if (bitString.getValue(i)) { - // 1X - if (bitString.getValue(i + 1)) { - // 11 - return i; - } else { - // 10, the next can be skipped - i += 2; - } - } else { - // 0, next - i++; - } - } - throw new DecodingException("fadf"); - } } From 36452372e3a701c146be2c12e57c467f32a3a798 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 21:17:39 -0500 Subject: [PATCH 063/146] optimize encode --- .../com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 0ab2a6d8..7b34c036 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -40,9 +40,10 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { int index = 0; while (index <= length - BASE64_BITS) { try { - int n = FixedIntegerEncoder.decode(bitString, index, index + BASE64_BITS); + int nextIndex = index + BASE64_BITS; + int n = FixedIntegerEncoder.decode(bitString, index, nextIndex); str.append(DICT.charAt(n)); - index += BASE64_BITS; + index = nextIndex;; } catch (DecodingException e) { throw new EncodingException("Unencodable Base64Url '" + bitString + "'"); } From b569dffbf7044b436f2df83c760ab1dfc8f1b051 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 20:32:34 -0500 Subject: [PATCH 064/146] convert fields to enums --- .../iab/gpp/encoder/field/HeaderV1Field.java | 23 ++++-- .../iab/gpp/encoder/field/TcfCaV1Field.java | 69 +++++++++------- .../iab/gpp/encoder/field/TcfEuV2Field.java | 81 +++++++++++-------- .../com/iab/gpp/encoder/field/UsCaField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsCoField.java | 51 +++++++----- .../com/iab/gpp/encoder/field/UsCtField.java | 51 +++++++----- .../com/iab/gpp/encoder/field/UsDeField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsFlField.java | 41 ++++++---- .../com/iab/gpp/encoder/field/UsIaField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsMtField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsNatField.java | 61 ++++++++------ .../com/iab/gpp/encoder/field/UsNeField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsNhField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsNjField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsOrField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsTnField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsTxField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsUtField.java | 41 ++++++---- .../com/iab/gpp/encoder/field/UsVaField.java | 39 +++++---- .../com/iab/gpp/encoder/field/UspV1Field.java | 25 ++++-- .../gpp/encoder/section/EncodableSection.java | 8 +- .../com/iab/gpp/encoder/section/FieldKey.java | 6 ++ .../com/iab/gpp/encoder/section/HeaderV1.java | 10 +-- .../com/iab/gpp/encoder/section/TcfCaV1.java | 10 +-- .../com/iab/gpp/encoder/section/TcfEuV2.java | 8 +- .../com/iab/gpp/encoder/section/UsCa.java | 8 +- .../com/iab/gpp/encoder/section/UsCo.java | 8 +- .../com/iab/gpp/encoder/section/UsCt.java | 8 +- .../com/iab/gpp/encoder/section/UsDe.java | 8 +- .../com/iab/gpp/encoder/section/UsFl.java | 10 +-- .../com/iab/gpp/encoder/section/UsIa.java | 8 +- .../com/iab/gpp/encoder/section/UsMt.java | 8 +- .../com/iab/gpp/encoder/section/UsNat.java | 8 +- .../com/iab/gpp/encoder/section/UsNe.java | 8 +- .../com/iab/gpp/encoder/section/UsNh.java | 8 +- .../com/iab/gpp/encoder/section/UsNj.java | 8 +- .../com/iab/gpp/encoder/section/UsOr.java | 8 +- .../com/iab/gpp/encoder/section/UsTn.java | 8 +- .../com/iab/gpp/encoder/section/UsTx.java | 8 +- .../com/iab/gpp/encoder/section/UsUt.java | 10 +-- .../com/iab/gpp/encoder/section/UsVa.java | 10 +-- .../com/iab/gpp/encoder/section/UspV1.java | 10 +-- .../gpp/encoder/segment/EncodableSegment.java | 10 ++- .../encoder/segment/HeaderV1CoreSegment.java | 16 ++-- .../encoder/segment/TcfCaV1CoreSegment.java | 16 ++-- .../TcfCaV1DisclosedVendorsSegment.java | 16 ++-- .../TcfCaV1PublisherPurposesSegment.java | 16 ++-- .../encoder/segment/TcfEuV2CoreSegment.java | 16 ++-- .../TcfEuV2PublisherPurposesSegment.java | 16 ++-- .../segment/TcfEuV2VendorsAllowedSegment.java | 16 ++-- .../TcfEuV2VendorsDisclosedSegment.java | 16 ++-- .../gpp/encoder/segment/UsCaCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsCaGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsCoCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsCoGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsCtCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsCtGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsDeCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsDeGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsFlCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsIaCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsIaGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsMtCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsMtGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsNatCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsNatGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsNeCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsNeGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsNhCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsNhGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsNjCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsNjGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsOrCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsOrGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsTnCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsTnGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsTxCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsTxGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsUtCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsVaCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UspV1CoreSegment.java | 10 +-- 81 files changed, 988 insertions(+), 822 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 82c390aa..70a7170a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -1,14 +1,25 @@ package com.iab.gpp.encoder.field; -public final class HeaderV1Field { - private HeaderV1Field() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String ID = "Id"; - public static final String VERSION = "Version"; - public static final String SECTION_IDS = "SectionIds"; +public enum HeaderV1Field implements FieldKey { + ID("Id"), + VERSION("Version"), + SECTION_IDS("SectionIds"); + + private String name; + + HeaderV1Field(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 3f6026b9..8c63da89 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -1,37 +1,48 @@ package com.iab.gpp.encoder.field; -public final class TcfCaV1Field { - private TcfCaV1Field() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String CREATED = "Created"; - public static final String LAST_UPDATED = "LastUpdated"; - public static final String CMP_ID = "CmpId"; - public static final String CMP_VERSION = "CmpVersion"; - public static final String CONSENT_SCREEN = "ConsentScreen"; - public static final String CONSENT_LANGUAGE = "ConsentLanguage"; - public static final String VENDOR_LIST_VERSION = "VendorListVersion"; - public static final String TCF_POLICY_VERSION = "TcfPolicyVersion"; - public static final String USE_NON_STANDARD_STACKS = "UseNonStandardStacks"; - public static final String SPECIAL_FEATURE_EXPRESS_CONSENT = "SpecialFeatureExpressConsent"; - public static final String PURPOSES_EXPRESS_CONSENT = "PurposesExpressConsent"; - public static final String PURPOSES_IMPLIED_CONSENT = "PurposesImpliedConsent"; - public static final String VENDOR_EXPRESS_CONSENT = "VendorExpressConsent"; - public static final String VENDOR_IMPLIED_CONSENT = "VendorImpliedConsent"; - public static final String PUB_RESTRICTIONS = "PubRestrictions"; +public enum TcfCaV1Field implements FieldKey { + VERSION("Version"), + CREATED("Created"), + LAST_UPDATED("LastUpdated"), + CMP_ID("CmpId"), + CMP_VERSION("CmpVersion"), + CONSENT_SCREEN("ConsentScreen"), + CONSENT_LANGUAGE("ConsentLanguage"), + VENDOR_LIST_VERSION("VendorListVersion"), + TCF_POLICY_VERSION("TcfPolicyVersion"), + USE_NON_STANDARD_STACKS("UseNonStandardStacks"), + SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent"), + PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent"), + PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent"), + VENDOR_EXPRESS_CONSENT("VendorExpressConsent"), + VENDOR_IMPLIED_CONSENT("VendorImpliedConsent"), + PUB_RESTRICTIONS("PubRestrictions"), - public static final String PUB_PURPOSES_SEGMENT_TYPE = "PubPurposesSegmentType"; - public static final String PUB_PURPOSES_EXPRESS_CONSENT = "PubPurposesExpressConsent"; - public static final String PUB_PURPOSES_IMPLIED_CONSENT = "PubPurposesImpliedConsent"; - public static final String NUM_CUSTOM_PURPOSES = "NumCustomPurposes"; - public static final String CUSTOM_PURPOSES_EXPRESS_CONSENT = "CustomPurposesExpressConsent"; - public static final String CUSTOM_PURPOSES_IMPLIED_CONSENT = "CustomPurposesImpliedConsent"; + PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType"), + PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent"), + PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent"), + NUM_CUSTOM_PURPOSES("NumCustomPurposes"), + CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent"), + CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent"), - public static final String DISCLOSED_VENDORS_SEGMENT_TYPE = "DisclosedVendorsSegmentType"; - public static final String DISCLOSED_VENDORS = "DisclosedVendors"; + DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType"), + DISCLOSED_VENDORS("DisclosedVendors"); + + private String name; + + TcfCaV1Field(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.VERSION, TcfCaV1Field.CREATED, TcfCaV1Field.LAST_UPDATED, @@ -52,7 +63,7 @@ private TcfCaV1Field() {} //@formatter:on //@formatter:off - public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, @@ -63,7 +74,7 @@ private TcfCaV1Field() {} //@formatter:on //@formatter:off - public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, TcfCaV1Field.DISCLOSED_VENDORS ); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 3fa0df6d..7dc29f92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,40 +1,51 @@ package com.iab.gpp.encoder.field; -public final class TcfEuV2Field { - private TcfEuV2Field() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String CREATED = "Created"; - public static final String LAST_UPDATED = "LastUpdated"; - public static final String CMP_ID = "CmpId"; - public static final String CMP_VERSION = "CmpVersion"; - public static final String CONSENT_SCREEN = "ConsentScreen"; - public static final String CONSENT_LANGUAGE = "ConsentLanguage"; - public static final String VENDOR_LIST_VERSION = "VendorListVersion"; - public static final String POLICY_VERSION = "PolicyVersion"; - public static final String IS_SERVICE_SPECIFIC = "IsServiceSpecific"; - public static final String USE_NON_STANDARD_STACKS = "UseNonStandardStacks"; - public static final String SPECIAL_FEATURE_OPTINS = "SpecialFeatureOptins"; - public static final String PURPOSE_CONSENTS = "PurposeConsents"; - public static final String PURPOSE_LEGITIMATE_INTERESTS = "PurposeLegitimateInterests"; - public static final String PURPOSE_ONE_TREATMENT = "PurposeOneTreatment"; - public static final String PUBLISHER_COUNTRY_CODE = "PublisherCountryCode"; - public static final String VENDOR_CONSENTS = "VendorConsents"; - public static final String VENDOR_LEGITIMATE_INTERESTS = "VendorLegitimateInterests"; - public static final String PUBLISHER_RESTRICTIONS = "PublisherRestrictions"; - public static final String PUBLISHER_PURPOSES_SEGMENT_TYPE = "PublisherPurposesSegmentType"; - public static final String PUBLISHER_CONSENTS = "PublisherConsents"; - public static final String PUBLISHER_LEGITIMATE_INTERESTS = "PublisherLegitimateInterests"; - public static final String NUM_CUSTOM_PURPOSES = "NumCustomPurposes"; - public static final String PUBLISHER_CUSTOM_CONSENTS = "PublisherCustomConsents"; - public static final String PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS = "PublisherCustomLegitimateInterests"; - public static final String VENDORS_ALLOWED_SEGMENT_TYPE = "VendorsAllowedSegmentType"; - public static final String VENDORS_ALLOWED = "VendorsAllowed"; - public static final String VENDORS_DISCLOSED_SEGMENT_TYPE = "VendorsDisclosedSegmentType"; - public static final String VENDORS_DISCLOSED = "VendorsDisclosed"; +public enum TcfEuV2Field implements FieldKey { + VERSION("Version"), + CREATED("Created"), + LAST_UPDATED("LastUpdated"), + CMP_ID("CmpId"), + CMP_VERSION("CmpVersion"), + CONSENT_SCREEN("ConsentScreen"), + CONSENT_LANGUAGE("ConsentLanguage"), + VENDOR_LIST_VERSION("VendorListVersion"), + POLICY_VERSION("PolicyVersion"), + IS_SERVICE_SPECIFIC("IsServiceSpecific"), + USE_NON_STANDARD_STACKS("UseNonStandardStacks"), + SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins"), + PURPOSE_CONSENTS("PurposeConsents"), + PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests"), + PURPOSE_ONE_TREATMENT("PurposeOneTreatment"), + PUBLISHER_COUNTRY_CODE("PublisherCountryCode"), + VENDOR_CONSENTS("VendorConsents"), + VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests"), + PUBLISHER_RESTRICTIONS("PublisherRestrictions"), + PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType"), + PUBLISHER_CONSENTS("PublisherConsents"), + PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests"), + NUM_CUSTOM_PURPOSES("NumCustomPurposes"), + PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents"), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests"), + VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType"), + VENDORS_ALLOWED("VendorsAllowed"), + VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType"), + VENDORS_DISCLOSED("VendorsDisclosed"); + + private String name; + + TcfEuV2Field(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VERSION, TcfEuV2Field.CREATED, TcfEuV2Field.LAST_UPDATED, @@ -58,7 +69,7 @@ private TcfEuV2Field() {} //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, TcfEuV2Field.PUBLISHER_CONSENTS, TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, @@ -69,14 +80,14 @@ private TcfEuV2Field() {} //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED ); //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_DISCLOSED ); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 3b5ef779..4279c41c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsCaField { - private UsCaField() {} - - public static final String VERSION = "Version"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String SHARING_OPT_OUT_NOTICE = "SharingOptOutNotice"; - public static final String SENSITIVE_DATA_LIMIT_USE_NOTICE = "SensitiveDataLimitUseNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String SHARING_OPT_OUT = "SharingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String PERSONAL_DATA_CONSENTS = "PersonalDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsCaField implements FieldKey { + VERSION("Version"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + SHARING_OPT_OUT_NOTICE("SharingOptOutNotice"), + SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice"), + SALE_OPT_OUT("SaleOptOut"), + SHARING_OPT_OUT("SharingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + PERSONAL_DATA_CONSENTS("PersonalDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsCaField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCaField.VERSION, UsCaField.SALE_OPT_OUT_NOTICE, UsCaField.SHARING_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsCaField() {} //@formatter:on //@formatter:off - public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCaField.GPC_SEGMENT_TYPE, UsCaField.GPC_SEGMENT_INCLUDED, UsCaField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 516c32a8..00f1c36c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -1,26 +1,37 @@ package com.iab.gpp.encoder.field; -public final class UsCoField { - private UsCoField() {} - - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsCoField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsCoField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCoField.VERSION, UsCoField.SHARING_NOTICE, UsCoField.SALE_OPT_OUT_NOTICE, @@ -36,7 +47,7 @@ private UsCoField() {} //@formatter:on //@formatter:off - public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCoField.GPC_SEGMENT_TYPE, UsCoField.GPC_SEGMENT_INCLUDED, UsCoField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 56700df9..abcb9aad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -1,26 +1,37 @@ package com.iab.gpp.encoder.field; -public final class UsCtField { - private UsCtField() {} - - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsCtField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsCtField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCtField.VERSION, UsCtField.SHARING_NOTICE, UsCtField.SALE_OPT_OUT_NOTICE, @@ -36,7 +47,7 @@ private UsCtField() {} //@formatter:on //@formatter:off - public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCtField.GPC_SEGMENT_TYPE, UsCtField.GPC_SEGMENT_INCLUDED, UsCtField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 7e52bcaf..7670bacf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsDeField { - private UsDeField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsDeField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsDeField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsDeField.VERSION, UsDeField.PROCESSING_NOTICE, UsDeField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsDeField() {} //@formatter:on //@formatter:off - public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsDeField.GPC_SEGMENT_TYPE, UsDeField.GPC_SEGMENT_INCLUDED, UsDeField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index ae50962c..04ace53b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -1,23 +1,34 @@ package com.iab.gpp.encoder.field; -public final class UsFlField { - private UsFlField() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; +public enum UsFlField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + + private String name; + + UsFlField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsFlField.VERSION, UsFlField.PROCESSING_NOTICE, UsFlField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index 90d2662a..5defbe4f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsIaField { - private UsIaField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SENSITIVE_DATA_OPT_OUT_NOTICE = "SensitiveDataOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsIaField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsIaField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsIaField.VERSION, UsIaField.PROCESSING_NOTICE, UsIaField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsIaField() {} //@formatter:on //@formatter:off - public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsIaField.GPC_SEGMENT_TYPE, UsIaField.GPC_SEGMENT_INCLUDED, UsIaField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index f3946b6f..ccdbfa98 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsMtField { - private UsMtField() {} - - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsMtField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsMtField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsMtField.VERSION, UsMtField.SHARING_NOTICE, UsMtField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsMtField() {} //@formatter:on //@formatter:off - public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsMtField.GPC_SEGMENT_TYPE, UsMtField.GPC_SEGMENT_INCLUDED, UsMtField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index d43cb586..c51b9652 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,31 +1,42 @@ package com.iab.gpp.encoder.field; -public final class UsNatField { - private UsNatField() {} - - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String SHARING_OPT_OUT_NOTICE = "SharingOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE = "SensitiveDataProcessingOptOutNotice"; - public static final String SENSITIVE_DATA_LIMIT_USE_NOTICE = "SensitiveDataLimitUseNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String SHARING_OPT_OUT = "SharingOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String PERSONAL_DATA_CONSENTS = "PersonalDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsNatField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + SHARING_OPT_OUT_NOTICE("SharingOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice"), + SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice"), + SALE_OPT_OUT("SaleOptOut"), + SHARING_OPT_OUT("SharingOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + PERSONAL_DATA_CONSENTS("PersonalDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsNatField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNatField.VERSION, UsNatField.SHARING_NOTICE, UsNatField.SALE_OPT_OUT_NOTICE, @@ -46,7 +57,7 @@ private UsNatField() {} //@formatter:on //@formatter:off - public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 93a99130..1b57a1c6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsNeField { - private UsNeField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsNeField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsNeField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNeField.VERSION, UsNeField.PROCESSING_NOTICE, UsNeField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsNeField() {} //@formatter:on //@formatter:off - public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNeField.GPC_SEGMENT_TYPE, UsNeField.GPC_SEGMENT_INCLUDED, UsNeField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 44b99fbe..4b0016b7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsNhField { - private UsNhField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsNhField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsNhField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNhField.VERSION, UsNhField.PROCESSING_NOTICE, UsNhField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsNhField() {} //@formatter:on //@formatter:off - public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNhField.GPC_SEGMENT_TYPE, UsNhField.GPC_SEGMENT_INCLUDED, UsNhField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 1ef95e28..a1282d17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsNjField { - private UsNjField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsNjField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsNjField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNjField.VERSION, UsNjField.PROCESSING_NOTICE, UsNjField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsNjField() {} //@formatter:on //@formatter:off - public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNjField.GPC_SEGMENT_TYPE, UsNjField.GPC_SEGMENT_INCLUDED, UsNjField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index adf05255..3c131c4e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsOrField { - private UsOrField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsOrField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsOrField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsOrField.VERSION, UsOrField.PROCESSING_NOTICE, UsOrField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsOrField() {} //@formatter:on //@formatter:off - public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsOrField.GPC_SEGMENT_TYPE, UsOrField.GPC_SEGMENT_INCLUDED, UsOrField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 4271199e..5879e7df 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsTnField { - private UsTnField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsTnField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsTnField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsTnField.VERSION, UsTnField.PROCESSING_NOTICE, UsTnField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsTnField() {} //@formatter:on //@formatter:off - public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsTnField.GPC_SEGMENT_TYPE, UsTnField.GPC_SEGMENT_INCLUDED, UsTnField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 5729593a..63f4ec18 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsTxField { - private UsTxField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsTxField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsTxField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsTxField.VERSION, UsTxField.PROCESSING_NOTICE, UsTxField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsTxField() {} //@formatter:on //@formatter:off - public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsTxField.GPC_SEGMENT_TYPE, UsTxField.GPC_SEGMENT_INCLUDED, UsTxField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 4cc9ff47..6d65cb51 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -1,23 +1,34 @@ package com.iab.gpp.encoder.field; -public final class UsUtField { - private UsUtField() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE = "SensitiveDataProcessingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; +public enum UsUtField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + + private String name; + + UsUtField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsUtField.VERSION, UsUtField.SHARING_NOTICE, UsUtField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index dd9e75cf..64b5fe6f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -1,22 +1,33 @@ package com.iab.gpp.encoder.field; -public final class UsVaField { - private UsVaField() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; +public enum UsVaField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + + private String name; + + UsVaField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsVaField.VERSION, UsVaField.SHARING_NOTICE, UsVaField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index 9b497991..c75ba981 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -1,15 +1,26 @@ package com.iab.gpp.encoder.field; -public final class UspV1Field { - private UspV1Field() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String NOTICE = "Notice"; - public static final String OPT_OUT_SALE = "OptOutSale"; - public static final String LSPA_COVERED = "LspaCovered"; +public enum UspV1Field implements FieldKey { + VERSION("Version"), + NOTICE("Notice"), + OPT_OUT_SALE("OptOutSale"), + LSPA_COVERED("LspaCovered"); + + private String name; + + UspV1Field(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UspV1Field.VERSION, UspV1Field.NOTICE, UspV1Field.OPT_OUT_SALE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index a7324eef..2e12e2d5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.section; -public interface EncodableSection { +public interface EncodableSection & FieldKey> { int getId(); @@ -8,6 +8,12 @@ public interface EncodableSection { int getVersion(); + boolean hasField(E fieldName); + + Object getFieldValue(E fieldName); + + void setFieldValue(E fieldName, Object value); + boolean hasField(String fieldName); Object getFieldValue(String fieldName); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java new file mode 100644 index 00000000..83c4aaa9 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java @@ -0,0 +1,6 @@ +package com.iab.gpp.encoder.section; + +public interface FieldKey { + String getName(); + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 3e6faa0c..c7dcfb25 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; -public class HeaderV1 extends AbstractLazilyEncodableSection { +public class HeaderV1 extends AbstractLazilyEncodableSection { public static final int ID = 3; public static final int VERSION = 1; @@ -39,12 +39,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new HeaderV1CoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -59,9 +59,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { + for(EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index e082f067..5d1639ce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -14,7 +14,7 @@ import com.iab.gpp.encoder.segment.TcfCaV1DisclosedVendorsSegment; import com.iab.gpp.encoder.segment.TcfCaV1PublisherPurposesSegment; -public class TcfCaV1 extends AbstractLazilyEncodableSection { +public class TcfCaV1 extends AbstractLazilyEncodableSection { public static final int ID = 5; public static final int VERSION = 1; @@ -45,12 +45,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); } @Override - public List decodeSection(CharSequence encodedString) { + public List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { @@ -87,7 +87,7 @@ public List decodeSection(CharSequence encodedString) { } @Override - public CharSequence encodeSection(List segments) { + public CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -100,7 +100,7 @@ public CharSequence encodeSection(List segments) { } @Override - public void setFieldValue(String fieldName, Object value) throws InvalidFieldException { + public void setFieldValue(TcfCaV1Field fieldName, Object value) throws InvalidFieldException { super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 3c378d46..7aaf4989 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -15,7 +15,7 @@ import com.iab.gpp.encoder.segment.TcfEuV2VendorsAllowedSegment; import com.iab.gpp.encoder.segment.TcfEuV2VendorsDisclosedSegment; -public class TcfEuV2 extends AbstractLazilyEncodableSection { +public class TcfEuV2 extends AbstractLazilyEncodableSection { public static final int ID = 2; public static final int VERSION = 2; @@ -46,12 +46,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); } @Override - public List decodeSection(CharSequence encodedString) { + public List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { @@ -92,7 +92,7 @@ public List decodeSection(CharSequence encodedString) { } @Override - public CharSequence encodeSection(List segments) { + public CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index d737de1d..9e00e72f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCaCoreSegment; import com.iab.gpp.encoder.segment.UsCaGpcSegment; -public class UsCa extends AbstractLazilyEncodableSection { +public class UsCa extends AbstractLazilyEncodableSection { public static final int ID = 8; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsCaCoreSegment(), new UsCaGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 31a40d9d..91e3adae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCoCoreSegment; import com.iab.gpp.encoder.segment.UsCoGpcSegment; -public class UsCo extends AbstractLazilyEncodableSection { +public class UsCo extends AbstractLazilyEncodableSection { public static final int ID = 10; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsCoCoreSegment(), new UsCoGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 3bc3c5b6..225fbc3a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCtCoreSegment; import com.iab.gpp.encoder.segment.UsCtGpcSegment; -public class UsCt extends AbstractLazilyEncodableSection { +public class UsCt extends AbstractLazilyEncodableSection { public static final int ID = 12; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsCtCoreSegment(), new UsCtGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index cd3b11c5..de0ac909 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsDeCoreSegment; import com.iab.gpp.encoder.segment.UsDeGpcSegment; -public class UsDe extends AbstractLazilyEncodableSection { +public class UsDe extends AbstractLazilyEncodableSection { public static final int ID = 17; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsDeCoreSegment(), new UsDeGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if (!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 3c8888e1..771e6278 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsFlCoreSegment; -public class UsFl extends AbstractLazilyEncodableSection { +public class UsFl extends AbstractLazilyEncodableSection { public static final int ID = 13; public static final int VERSION = 1; @@ -39,12 +39,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new UsFlCoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -59,9 +59,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for (EncodableSegment segment : segments) { + for (EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index b7ffc38e..d19650e7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsIaCoreSegment; import com.iab.gpp.encoder.segment.UsIaGpcSegment; -public class UsIa extends AbstractLazilyEncodableSection { +public class UsIa extends AbstractLazilyEncodableSection { public static final int ID = 18; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsIaCoreSegment(), new UsIaGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if (!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index a4e57d2f..0e5a0df9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsMtCoreSegment; import com.iab.gpp.encoder.segment.UsMtGpcSegment; -public class UsMt extends AbstractLazilyEncodableSection { +public class UsMt extends AbstractLazilyEncodableSection { public static final int ID = 14; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsMtCoreSegment(), new UsMtGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 64b6c8f0..480178f3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNatCoreSegment; import com.iab.gpp.encoder.segment.UsNatGpcSegment; -public class UsNat extends AbstractLazilyEncodableSection { +public class UsNat extends AbstractLazilyEncodableSection { public static final int ID = 7; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsNatCoreSegment(), new UsNatGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index a009def8..e4d4f32e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNeCoreSegment; import com.iab.gpp.encoder.segment.UsNeGpcSegment; -public class UsNe extends AbstractLazilyEncodableSection { +public class UsNe extends AbstractLazilyEncodableSection { public static final int ID = 19; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsNeCoreSegment(), new UsNeGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index a907d2ed..fbeae34a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNhCoreSegment; import com.iab.gpp.encoder.segment.UsNhGpcSegment; -public class UsNh extends AbstractLazilyEncodableSection { +public class UsNh extends AbstractLazilyEncodableSection { public static final int ID = 20; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsNhCoreSegment(), new UsNhGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index c5c648ea..bf5297cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNjCoreSegment; import com.iab.gpp.encoder.segment.UsNjGpcSegment; -public class UsNj extends AbstractLazilyEncodableSection { +public class UsNj extends AbstractLazilyEncodableSection { public static final int ID = 21; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsNjCoreSegment(), new UsNjGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 41d0d3ce..97c771e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsOrCoreSegment; import com.iab.gpp.encoder.segment.UsOrGpcSegment; -public class UsOr extends AbstractLazilyEncodableSection { +public class UsOr extends AbstractLazilyEncodableSection { public static final int ID = 15; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsOrCoreSegment(), new UsOrGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 23b17edf..e582d57d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsTnCoreSegment; import com.iab.gpp.encoder.segment.UsTnGpcSegment; -public class UsTn extends AbstractLazilyEncodableSection { +public class UsTn extends AbstractLazilyEncodableSection { public static final int ID = 22; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsTnCoreSegment(), new UsTnGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 521ff729..2f7f2e70 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsTxCoreSegment; import com.iab.gpp.encoder.segment.UsTxGpcSegment; -public class UsTx extends AbstractLazilyEncodableSection { +public class UsTx extends AbstractLazilyEncodableSection { public static final int ID = 16; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsTxCoreSegment(), new UsTxGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 05cc7836..caec1ae6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsUtCoreSegment; -public class UsUt extends AbstractLazilyEncodableSection { +public class UsUt extends AbstractLazilyEncodableSection { public static final int ID = 11; public static final int VERSION = 1; @@ -39,12 +39,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new UsUtCoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -59,9 +59,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { + for(EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 95a0abd0..efd499ee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsVaCoreSegment; -public class UsVa extends AbstractLazilyEncodableSection { +public class UsVa extends AbstractLazilyEncodableSection { public static final int ID = 9; public static final int VERSION = 1; @@ -39,12 +39,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new UsVaCoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -59,9 +59,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for (EncodableSegment segment : segments) { + for (EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index 0e1f7f88..ef76b18d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -7,7 +7,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UspV1CoreSegment; -public class UspV1 extends AbstractLazilyEncodableSection { +public class UspV1 extends AbstractLazilyEncodableSection { public static final int ID = 6; public static final int VERSION = 1; @@ -38,12 +38,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new UspV1CoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -58,9 +58,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { + for(EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 033b14c9..15c529d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,7 +1,15 @@ package com.iab.gpp.encoder.segment; -public interface EncodableSegment { +import com.iab.gpp.encoder.section.FieldKey; +public interface EncodableSegment & FieldKey> { + + boolean hasField(E fieldName); + + Object getFieldValue(E fieldName); + + void setFieldValue(E fieldName, Object value); + boolean hasField(String fieldName); Object getFieldValue(String fieldName); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index adea375e..3ac48afd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.HeaderV1; -public final class HeaderV1CoreSegment extends AbstractLazilyEncodableSegment { +public final class HeaderV1CoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public HeaderV1CoreSegment() { super(); @@ -27,8 +25,8 @@ public HeaderV1CoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); fields.put(HeaderV1Field.ID, new EncodableFixedInteger(6, HeaderV1.ID)); fields.put(HeaderV1Field.VERSION, new EncodableFixedInteger(6, HeaderV1.VERSION)); fields.put(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange()); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode HeaderV1CoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 5b081f6e..5d16c84b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -18,10 +17,9 @@ import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.section.TcfCaV1; -public final class TcfCaV1CoreSegment extends AbstractLazilyEncodableSegment { +public final class TcfCaV1CoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfCaV1CoreSegment() { super(); @@ -33,11 +31,11 @@ public TcfCaV1CoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { + protected EncodableBitStringFields initializeFields() { // NOTE: TcfCaV1.setFieldValue records modifications Instant date = Instant.EPOCH; - EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); fields.put(TcfCaV1Field.CREATED, new EncodableDatetime(date)); fields.put(TcfCaV1Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -58,19 +56,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1CoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 7d1f83a9..6c30191a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -4,17 +4,15 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public final class TcfCaV1DisclosedVendorsSegment extends AbstractLazilyEncodableSegment { +public final class TcfCaV1DisclosedVendorsSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfCaV1DisclosedVendorsSegment() { super(); @@ -26,27 +24,27 @@ public TcfCaV1DisclosedVendorsSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange()); return fields; } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1DisclosedVendorsSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 0424bb5d..fbda3a87 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; @@ -13,10 +12,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public final class TcfCaV1PublisherPurposesSegment extends AbstractLazilyEncodableSegment { +public final class TcfCaV1PublisherPurposesSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfCaV1PublisherPurposesSegment() { super(); @@ -28,8 +26,8 @@ public TcfCaV1PublisherPurposesSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); fields.put(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); @@ -55,19 +53,19 @@ public int getAsInt() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1PublisherPurposesSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 98f81351..5ff3698f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -18,10 +17,9 @@ import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.section.TcfEuV2; -public final class TcfEuV2CoreSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2CoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2CoreSegment() { super(); @@ -33,11 +31,11 @@ public TcfEuV2CoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { + protected EncodableBitStringFields initializeFields() { // NOTE: TcfEuV2.setFieldValue records modifications Instant date = Instant.EPOCH; - EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VERSION, new EncodableFixedInteger(6, TcfEuV2.VERSION)); fields.put(TcfEuV2Field.CREATED, new EncodableDatetime(date)); fields.put(TcfEuV2Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -62,19 +60,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2CoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 69135848..1c547c73 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; @@ -13,10 +12,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2PublisherPurposesSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2PublisherPurposesSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2PublisherPurposesSegment() { super(); @@ -28,8 +26,8 @@ public TcfEuV2PublisherPurposesSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfEuV2Field.PUBLISHER_CONSENTS, new EncodableFixedBitfield(24)); fields.put(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); @@ -55,19 +53,19 @@ public int getAsInt() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2PublisherPurposesSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 9bd9a7c3..0c8b721b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -4,17 +4,15 @@ import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2VendorsAllowedSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2VendorsAllowedSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2VendorsAllowedSegment() { super(); @@ -26,27 +24,27 @@ public TcfEuV2VendorsAllowedSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, new EncodableFixedInteger(3, 2)); fields.put(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange()); return fields; } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2VendorsAllowedSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 4db588ed..15296c92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -4,17 +4,15 @@ import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2VendorsDisclosedSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2VendorsDisclosedSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2VendorsDisclosedSegment() { super(); @@ -26,27 +24,27 @@ public TcfEuV2VendorsDisclosedSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange()); return fields; } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2VendorsDisclosedSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 0072a91f..2c54f993 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.section.UsCa; -public final class UsCaCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsCaCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCaCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsCaCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); fields.put(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); fields.put(UsCaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index ed72554c..6510708f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCaField; -public final class UsCaGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsCaGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCaGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsCaGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); fields.put(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCaField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCaGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index deafdc52..86a85d74 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.section.UsCo; -public final class UsCoCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsCoCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCoCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsCoCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); fields.put(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); fields.put(UsCoField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -54,19 +52,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCoCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 509e8aaf..587036e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCoField; -public final class UsCoGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsCoGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCoGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsCoGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); fields.put(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCoField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCoGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index 46535363..bacd8f06 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.section.UsCt; -public final class UsCtCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsCtCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCtCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsCtCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); fields.put(UsCtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -55,19 +53,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCtCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index b15c2ab5..9caefcce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCtField; -public final class UsCtGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsCtGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCtGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsCtGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); fields.put(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCtField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCtGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 6b935cf8..e1f3ff2b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.section.UsDe; -public final class UsDeCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsDeCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsDeCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsDeCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); fields.put(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); fields.put(UsDeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -58,19 +56,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsDeCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 6978a358..bc7338f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsDeField; -public final class UsDeGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsDeGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsDeGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsDeGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); fields.put(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsDeField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsDeGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 9e6e49b7..61dfb5af 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.section.UsFl; -public final class UsFlCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsFlCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsFlCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsFlCoreSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); fields.put(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); fields.put(UsFlField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsFlCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 087f0445..7432a589 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsIaField; import com.iab.gpp.encoder.section.UsIa; -public final class UsIaCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsIaCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsIaCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsIaCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); fields.put(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); fields.put(UsIaField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsIaCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 02a9eb1e..59695f80 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsIaField; -public final class UsIaGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsIaGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsIaGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsIaGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); fields.put(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsIaField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsIaGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 89cad156..85858c49 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.section.UsMt; -public final class UsMtCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsMtCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsMtCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsMtCoreSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); fields.put(UsMtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsMtCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 60c2e3b9..086243a6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsMtField; -public final class UsMtGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsMtGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsMtGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsMtGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); fields.put(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsMtField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsMtGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index e5e60e3e..f70f479b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.section.UsNat; -public final class UsNatCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNatCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNatCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsNatCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); fields.put(UsNatField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,13 +63,13 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } @@ -92,7 +90,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField bitString = builder.build(); } - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNatCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 5d0771a3..07319157 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNatField; -public final class UsNatGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNatGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNatGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsNatGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNatField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNatGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index 52d06230..f3d6462a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.section.UsNe; -public final class UsNeCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNeCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNeCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsNeCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); fields.put(UsNeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNeCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 16b3e688..36b80634 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNeField; -public final class UsNeGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNeGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNeGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsNeGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNeField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNeGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 44ce9219..5940fcba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.section.UsNh; -public final class UsNhCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNhCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNhCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsNhCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); fields.put(UsNhField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNhCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 1343c79e..569d52d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNhField; -public final class UsNhGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNhGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNhGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsNhGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNhField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNhGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 3de4bb2f..14ad705e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.section.UsNj; -public final class UsNjCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNjCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNjCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsNjCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); fields.put(UsNjField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNjCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index e5b14d7e..611b97c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNjField; -public final class UsNjGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNjGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNjGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsNjGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNjField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNjGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index a1278600..9a66f0f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsOrField; import com.iab.gpp.encoder.section.UsOr; -public final class UsOrCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsOrCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsOrCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsOrCoreSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); fields.put(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); fields.put(UsOrField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsOrCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 087a6d3d..72e33543 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsOrField; -public final class UsOrGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsOrGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsOrGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsOrGpcSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); fields.put(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsOrField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsOrGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index c22afdf6..dbd4ad61 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.section.UsTn; -public final class UsTnCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsTnCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTnCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsTnCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); fields.put(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); fields.put(UsTnField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsTnCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index 12c5aab3..a0e320fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTnField; -public final class UsTnGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsTnGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTnGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsTnGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); fields.put(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTnField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsTnGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 8c67106a..7489d79c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsTxField; import com.iab.gpp.encoder.section.UsTx; -public final class UsTxCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsTxCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTxCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsTxCoreSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); fields.put(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); fields.put(UsTxField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsTxCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index 33626df8..c0453c74 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTxField; -public final class UsTxGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsTxGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTxGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsTxGpcSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); fields.put(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTxField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsTxGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 27e42ca4..6cc20375 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.section.UsUt; -public final class UsUtCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsUtCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsUtCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsUtCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); fields.put(UsUtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsUtCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index d0028cb6..b9a1a49a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.section.UsVa; -public final class UsVaCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsVaCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsVaCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsVaCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); fields.put(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); fields.put(UsVaField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -55,19 +53,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsVaCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 0dce8a33..089147d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -7,7 +7,7 @@ import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.section.UspV1; -public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment { +public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment> { public UspV1CoreSegment() { super(); @@ -19,8 +19,8 @@ public UspV1CoreSegment(String encodedString) { } @Override - protected GenericFields initializeFields() { - GenericFields fields = new GenericFields(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); + protected GenericFields initializeFields() { + GenericFields fields = new GenericFields<>(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); fields.put(UspV1Field.VERSION, new UnencodableInteger(UspV1.VERSION)); fields.put(UspV1Field.NOTICE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); fields.put(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); @@ -29,7 +29,7 @@ protected GenericFields initializeFields() { } @Override - protected StringBuilder encodeSegment(GenericFields fields) { + protected StringBuilder encodeSegment(GenericFields fields) { StringBuilder str = new StringBuilder(); str.append(fields.get(UspV1Field.VERSION).getValue()); str.append(fields.get(UspV1Field.NOTICE).getValue()); @@ -39,7 +39,7 @@ protected StringBuilder encodeSegment(GenericFields fields) { } @Override - protected void decodeSegment(CharSequence encodedString, GenericFields fields) { + protected void decodeSegment(CharSequence encodedString, GenericFields fields) { if (encodedString == null || encodedString.length() != 4) { throw new DecodingException("Invalid uspv1 string: '" + encodedString + "'"); } From af6ab8d8d0eff161311b9f040baf415fcd56c10e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 21:13:33 -0500 Subject: [PATCH 065/146] thin segments --- .../segment/AbstractBase64Segment.java | 44 ++++++++++++ .../encoder/segment/HeaderV1CoreSegment.java | 41 +----------- .../encoder/segment/TcfCaV1CoreSegment.java | 41 +----------- .../TcfCaV1DisclosedVendorsSegment.java | 40 +---------- .../TcfCaV1PublisherPurposesSegment.java | 40 +---------- .../encoder/segment/TcfEuV2CoreSegment.java | 40 +---------- .../TcfEuV2PublisherPurposesSegment.java | 40 +---------- .../segment/TcfEuV2VendorsAllowedSegment.java | 40 +---------- .../TcfEuV2VendorsDisclosedSegment.java | 40 +---------- .../gpp/encoder/segment/UsCaCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsCaGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsCoCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsCoGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsCtCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsCtGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsDeCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsDeGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsFlCoreSegment.java | 40 +---------- .../gpp/encoder/segment/UsIaCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsIaGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsMtCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsMtGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsNatCoreSegment.java | 67 +++++-------------- .../gpp/encoder/segment/UsNatGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsNeCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsNeGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsNhCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsNhGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsNjCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsNjGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsOrCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsOrGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsTnCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsTnGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsTxCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsTxGpcSegment.java | 41 +----------- .../gpp/encoder/segment/UsUtCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsVaCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UspV1CoreSegment.java | 21 ++---- 39 files changed, 139 insertions(+), 1450 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java new file mode 100644 index 00000000..270686d0 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -0,0 +1,44 @@ +package com.iab.gpp.encoder.segment; + +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.field.EncodableBitStringFields; +import com.iab.gpp.encoder.field.FieldNames; +import com.iab.gpp.encoder.field.UsCaField; +import com.iab.gpp.encoder.section.FieldKey; + +public abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { + + private final AbstractBase64UrlEncoder base64UrlEncoder; + protected AbstractBase64Segment(FieldNames fieldNames, AbstractBase64UrlEncoder base64UrlEncoder) { + super(fieldNames); + this.base64UrlEncoder = base64UrlEncoder; + } + + @Override + protected final StringBuilder encodeSegment() { + BitStringBuilder bitString = fields.encode(); + return base64UrlEncoder.encode(bitString); + } + + @Override + protected final void decodeSegment(CharSequence encodedString) { + if (encodedString == null || encodedString.length() == 0) { + this.fields.reset(fields); + } + try { + BitString bitString = decodeBitString(encodedString); + this.fields.decode(bitString); + } catch (Exception e) { + throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); + } + } + + protected BitString decodeBitString(CharSequence encodedString) { + return base64UrlEncoder.decode(encodedString); + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 3ac48afd..7501e7b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -1,55 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.HeaderV1; -public final class HeaderV1CoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class HeaderV1CoreSegment extends AbstractBase64Segment { public HeaderV1CoreSegment() { - super(); - } - - public HeaderV1CoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); + super(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(HeaderV1Field.ID, new EncodableFixedInteger(6, HeaderV1.ID)); fields.put(HeaderV1Field.VERSION, new EncodableFixedInteger(6, HeaderV1.VERSION)); fields.put(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange()); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode HeaderV1CoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 5d16c84b..595d7a8f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.segment; import java.time.Instant; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -12,30 +9,15 @@ import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedString; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.section.TcfCaV1; -public final class TcfCaV1CoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class TcfCaV1CoreSegment extends AbstractBase64Segment { public TcfCaV1CoreSegment() { - super(); - } - - public TcfCaV1CoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { + super(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); // NOTE: TcfCaV1.setFieldValue records modifications Instant date = Instant.EPOCH; - - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); fields.put(TcfCaV1Field.CREATED, new EncodableDatetime(date)); fields.put(TcfCaV1Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -52,25 +34,6 @@ protected EncodableBitStringFields initializeFields() { fields.put(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, new EncodableOptimizedFixedRange()); fields.put(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, new EncodableOptimizedFixedRange()); fields.put(TcfCaV1Field.PUB_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfCaV1CoreSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 6c30191a..56a956bd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -1,52 +1,16 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public final class TcfCaV1DisclosedVendorsSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class TcfCaV1DisclosedVendorsSegment extends AbstractBase64Segment { public TcfCaV1DisclosedVendorsSegment() { - super(); - } - - public TcfCaV1DisclosedVendorsSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); + super(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange()); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfCaV1DisclosedVendorsSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index fbda3a87..7b35a53a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -1,33 +1,16 @@ package com.iab.gpp.encoder.segment; import java.util.function.IntSupplier; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public final class TcfCaV1PublisherPurposesSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class TcfCaV1PublisherPurposesSegment extends AbstractBase64Segment { public TcfCaV1PublisherPurposesSegment() { - super(); - } - - public TcfCaV1PublisherPurposesSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); + super(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); fields.put(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); @@ -49,25 +32,6 @@ public int getAsInt() { fields.put(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, new EncodableFlexibleBitfield(getLengthSupplier)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfCaV1PublisherPurposesSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 5ff3698f..c4c9d1a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.segment; import java.time.Instant; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -12,30 +9,16 @@ import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedString; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.section.TcfEuV2; -public final class TcfEuV2CoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); +public final class TcfEuV2CoreSegment extends AbstractBase64Segment { public TcfEuV2CoreSegment() { - super(); - } - - public TcfEuV2CoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { + super(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); // NOTE: TcfEuV2.setFieldValue records modifications Instant date = Instant.EPOCH; - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VERSION, new EncodableFixedInteger(6, TcfEuV2.VERSION)); fields.put(TcfEuV2Field.CREATED, new EncodableDatetime(date)); fields.put(TcfEuV2Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -56,25 +39,6 @@ protected EncodableBitStringFields initializeFields() { fields.put(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, new EncodableOptimizedFixedRange()); fields.put(TcfEuV2Field.PUBLISHER_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfEuV2CoreSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 1c547c73..bc7ef3a7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -1,33 +1,16 @@ package com.iab.gpp.encoder.segment; import java.util.function.IntSupplier; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2PublisherPurposesSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); +public final class TcfEuV2PublisherPurposesSegment extends AbstractBase64Segment { public TcfEuV2PublisherPurposesSegment() { - super(); - } - - public TcfEuV2PublisherPurposesSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); + super(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); fields.put(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfEuV2Field.PUBLISHER_CONSENTS, new EncodableFixedBitfield(24)); fields.put(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); @@ -49,25 +32,6 @@ public int getAsInt() { fields.put(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS, new EncodableFlexibleBitfield(getLengthSupplier)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfEuV2PublisherPurposesSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 0c8b721b..b7b4e40d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -1,52 +1,16 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2VendorsAllowedSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); +public final class TcfEuV2VendorsAllowedSegment extends AbstractBase64Segment { public TcfEuV2VendorsAllowedSegment() { - super(); - } - - public TcfEuV2VendorsAllowedSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); + super(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); fields.put(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, new EncodableFixedInteger(3, 2)); fields.put(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange()); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfEuV2VendorsAllowedSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 15296c92..0da9fc2d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -1,52 +1,16 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2VendorsDisclosedSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); +public final class TcfEuV2VendorsDisclosedSegment extends AbstractBase64Segment { public TcfEuV2VendorsDisclosedSegment() { - super(); - } - - public TcfEuV2VendorsDisclosedSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); + super(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); fields.put(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange()); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfEuV2VendorsDisclosedSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 2c54f993..1375c6cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.section.UsCa; -public final class UsCaCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCaCoreSegment extends AbstractBase64Segment { public UsCaCoreSegment() { - super(); - } - - public UsCaCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); + super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); fields.put(UsCaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 6510708f..9dfbfb8c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCaField; -public final class UsCaGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCaGpcSegment extends AbstractBase64Segment { public UsCaGpcSegment() { - super(); - } - - public UsCaGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); + super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCaField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCaGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 86a85d74..e98f50eb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.section.UsCo; -public final class UsCoCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCoCoreSegment extends AbstractBase64Segment { public UsCoCoreSegment() { - super(); - } - - public UsCoCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); + super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); fields.put(UsCoField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -48,26 +31,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCoField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCoCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 587036e8..1da25138 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCoField; -public final class UsCoGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCoGpcSegment extends AbstractBase64Segment { public UsCoGpcSegment() { - super(); - } - - public UsCoGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); + super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCoField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCoGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index bacd8f06..707ffc68 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.section.UsCt; -public final class UsCtCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCtCoreSegment extends AbstractBase64Segment { public UsCtCoreSegment() { - super(); - } - - public UsCtCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); + super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); fields.put(UsCtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -49,26 +32,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCtCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index 9caefcce..da0aa637 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCtField; -public final class UsCtGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCtGpcSegment extends AbstractBase64Segment { public UsCtGpcSegment() { - super(); - } - - public UsCtGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); + super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCtField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCtGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index e1f3ff2b..e4f2c9c7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.section.UsDe; -public final class UsDeCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsDeCoreSegment extends AbstractBase64Segment { public UsDeCoreSegment() { - super(); - } - - public UsDeCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); + super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); fields.put(UsDeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -52,26 +35,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsDeField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsDeCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index bc7338f6..628f0c21 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsDeField; -public final class UsDeGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsDeGpcSegment extends AbstractBase64Segment { public UsDeGpcSegment() { - super(); - } - - public UsDeGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); + super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsDeField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsDeGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 61dfb5af..366cf2d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.section.UsFl; -public final class UsFlCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsFlCoreSegment extends AbstractBase64Segment { public UsFlCoreSegment() { - super(); - } - - public UsFlCoreSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); + super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); fields.put(UsFlField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,25 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsFlField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsFlCoreSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 7432a589..9f5bb0a3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsIaField; import com.iab.gpp.encoder.section.UsIa; -public final class UsIaCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsIaCoreSegment extends AbstractBase64Segment { public UsIaCoreSegment() { - super(); - } - - public UsIaCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); + super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); fields.put(UsIaField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsIaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsIaCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 59695f80..5c5deb06 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsIaField; -public final class UsIaGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsIaGpcSegment extends AbstractBase64Segment { public UsIaGpcSegment() { - super(); - } - - public UsIaGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); + super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsIaField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsIaGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 85858c49..72d52b8a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.section.UsMt; -public final class UsMtCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsMtCoreSegment extends AbstractBase64Segment { public UsMtCoreSegment() { - super(); - } - - public UsMtCoreSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); + super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); fields.put(UsMtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsMtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsMtCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 086243a6..2d079e14 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsMtField; -public final class UsMtGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsMtGpcSegment extends AbstractBase64Segment { public UsMtGpcSegment() { - super(); - } - - public UsMtGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); + super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsMtField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsMtGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index f70f479b..90a58bb4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,32 +1,17 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.section.UsNat; -public final class UsNatCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNatCoreSegment extends AbstractBase64Segment { public UsNatCoreSegment() { - super(); - } - - public UsNatCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); + super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); fields.put(UsNatField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -59,41 +44,25 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNatField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - - // Necessary to maintain backwards compatibility when sensitive data processing changed from a - // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the - // DE, IA, NE, NH, NJ, TN release - if (bitString.length() == 66) { - BitStringBuilder builder = new BitStringBuilder(); - - builder.append(bitString, 0, 48); - builder.extend(8); - builder.append(bitString, 48, 52); - builder.extend(2); - builder.append(bitString, 52, 62); - bitString = builder.build(); - } - - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNatCoreSegment '" + encodedString + "'", e); + protected BitString decodeBitString(CharSequence encodedString) { + BitString bitString = super.decodeBitString(encodedString); + // Necessary to maintain backwards compatibility when sensitive data processing changed from a + // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the + // DE, IA, NE, NH, NJ, TN release + if (bitString.length() == 66) { + BitStringBuilder builder = new BitStringBuilder(); + + builder.append(bitString, 0, 48); + builder.extend(8); + builder.append(bitString, 48, 52); + builder.extend(2); + builder.append(bitString, 52, 62); + bitString = builder.build(); } + return bitString; } - + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 07319157..d2eb4207 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNatField; -public final class UsNatGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNatGpcSegment extends AbstractBase64Segment { public UsNatGpcSegment() { - super(); - } - - public UsNatGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); + super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNatField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNatGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index f3d6462a..51c18681 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.section.UsNe; -public final class UsNeCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNeCoreSegment extends AbstractBase64Segment { public UsNeCoreSegment() { - super(); - } - - public UsNeCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); + super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); fields.put(UsNeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNeField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNeCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 36b80634..8353380b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNeField; -public final class UsNeGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNeGpcSegment extends AbstractBase64Segment { public UsNeGpcSegment() { - super(); - } - - public UsNeGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); + super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNeField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNeGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 5940fcba..7819025b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.section.UsNh; -public final class UsNhCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNhCoreSegment extends AbstractBase64Segment { public UsNhCoreSegment() { - super(); - } - - public UsNhCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); + super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); fields.put(UsNhField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNhField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNhCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 569d52d1..75682713 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNhField; -public final class UsNhGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNhGpcSegment extends AbstractBase64Segment { public UsNhGpcSegment() { - super(); - } - - public UsNhGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); + super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNhField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNhGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 14ad705e..566831fb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.section.UsNj; -public final class UsNjCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNjCoreSegment extends AbstractBase64Segment { public UsNjCoreSegment() { - super(); - } - - public UsNjCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); + super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); fields.put(UsNjField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNjField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNjCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 611b97c2..e00f54c1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNjField; -public final class UsNjGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNjGpcSegment extends AbstractBase64Segment { public UsNjGpcSegment() { - super(); - } - - public UsNjGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); + super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNjField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNjGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index 9a66f0f9..ee928561 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsOrField; import com.iab.gpp.encoder.section.UsOr; -public final class UsOrCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsOrCoreSegment extends AbstractBase64Segment { public UsOrCoreSegment() { - super(); - } - - public UsOrCoreSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); + super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); fields.put(UsOrField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsOrField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsOrCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 72e33543..46a889a8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsOrField; -public final class UsOrGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsOrGpcSegment extends AbstractBase64Segment { public UsOrGpcSegment() { - super(); - } - - public UsOrGpcSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); + super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsOrField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsOrGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index dbd4ad61..f031154d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.section.UsTn; -public final class UsTnCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsTnCoreSegment extends AbstractBase64Segment { public UsTnCoreSegment() { - super(); - } - - public UsTnCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); + super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); fields.put(UsTnField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsTnField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsTnCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index a0e320fe..c2ad6387 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTnField; -public final class UsTnGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsTnGpcSegment extends AbstractBase64Segment { public UsTnGpcSegment() { - super(); - } - - public UsTnGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); + super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTnField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsTnGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 7489d79c..7e4b7b5d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTxField; import com.iab.gpp.encoder.section.UsTx; -public final class UsTxCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsTxCoreSegment extends AbstractBase64Segment { public UsTxCoreSegment() { - super(); - } - - public UsTxCoreSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); + super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); fields.put(UsTxField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsTxField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsTxCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index c0453c74..a526f28a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -1,54 +1,17 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTxField; -public final class UsTxGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsTxGpcSegment extends AbstractBase64Segment { public UsTxGpcSegment() { - super(); - } - - public UsTxGpcSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); + super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTxField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsTxGpcSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 6cc20375..1fb16fb5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.section.UsUt; -public final class UsUtCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsUtCoreSegment extends AbstractBase64Segment { public UsUtCoreSegment() { - super(); - } - - public UsUtCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); + super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); fields.put(UsUtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsUtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsUtCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index b9a1a49a..159532f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.section.UsVa; -public final class UsVaCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsVaCoreSegment extends AbstractBase64Segment { public UsVaCoreSegment() { - super(); - } - - public UsVaCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); + super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); fields.put(UsVaField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -49,26 +32,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsVaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsVaCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 089147d6..2acfcd47 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -1,35 +1,24 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.UnencodableCharacter; import com.iab.gpp.encoder.datatype.UnencodableInteger; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.GenericFields; import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.section.UspV1; -public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment> { +public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment> { public UspV1CoreSegment() { - super(); - } - - public UspV1CoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected GenericFields initializeFields() { - GenericFields fields = new GenericFields<>(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); + super(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); fields.put(UspV1Field.VERSION, new UnencodableInteger(UspV1.VERSION)); fields.put(UspV1Field.NOTICE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); fields.put(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); fields.put(UspV1Field.LSPA_COVERED, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); - return fields; } @Override - protected StringBuilder encodeSegment(GenericFields fields) { + protected StringBuilder encodeSegment() { StringBuilder str = new StringBuilder(); str.append(fields.get(UspV1Field.VERSION).getValue()); str.append(fields.get(UspV1Field.NOTICE).getValue()); @@ -39,7 +28,7 @@ protected StringBuilder encodeSegment(GenericFields fields) { } @Override - protected void decodeSegment(CharSequence encodedString, GenericFields fields) { + protected void decodeSegment(CharSequence encodedString) { if (encodedString == null || encodedString.length() != 4) { throw new DecodingException("Invalid uspv1 string: '" + encodedString + "'"); } From 269e8a59dcd172a02bff39404fa30302bd2c0ecf Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 21:19:22 -0500 Subject: [PATCH 066/146] move --- .../gpp/encoder/field/EncodableBitStringFields.java | 11 ----------- .../iab/gpp/encoder/{section => field}/FieldKey.java | 2 +- .../java/com/iab/gpp/encoder/field/GenericFields.java | 11 ----------- .../java/com/iab/gpp/encoder/field/HeaderV1Field.java | 2 -- .../java/com/iab/gpp/encoder/field/TcfCaV1Field.java | 2 -- .../java/com/iab/gpp/encoder/field/TcfEuV2Field.java | 2 -- .../java/com/iab/gpp/encoder/field/UsCaField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsCoField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsCtField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsDeField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsFlField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsIaField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsMtField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsNatField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsNeField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsNhField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsNjField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsOrField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsTnField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsTxField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsUtField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsVaField.java | 2 -- .../java/com/iab/gpp/encoder/field/UspV1Field.java | 2 -- .../com/iab/gpp/encoder/section/EncodableSection.java | 2 ++ .../gpp/encoder/segment/AbstractBase64Segment.java | 2 +- .../com/iab/gpp/encoder/segment/EncodableSegment.java | 2 +- 26 files changed, 5 insertions(+), 65 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/{section => field}/FieldKey.java (58%) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java deleted file mode 100644 index e90c6f2e..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.field; - -import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; - -public final class EncodableBitStringFields extends Fields> { - - public EncodableBitStringFields(FieldNames fieldNames) { - super(fieldNames); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java similarity index 58% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 83c4aaa9..c425bd6d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -1,4 +1,4 @@ -package com.iab.gpp.encoder.section; +package com.iab.gpp.encoder.field; public interface FieldKey { String getName(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java deleted file mode 100644 index c644f333..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.field; - -import com.iab.gpp.encoder.datatype.DataType; - -public final class GenericFields extends Fields> { - - public GenericFields(FieldNames fieldNames) { - super(fieldNames); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 70a7170a..1dce80ad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum HeaderV1Field implements FieldKey { ID("Id"), VERSION("Version"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 8c63da89..15846312 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum TcfCaV1Field implements FieldKey { VERSION("Version"), CREATED("Created"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 7dc29f92..1b3062aa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum TcfEuV2Field implements FieldKey { VERSION("Version"), CREATED("Created"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 4279c41c..b44d9886 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsCaField implements FieldKey { VERSION("Version"), SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 00f1c36c..84cef9ee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsCoField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index abcb9aad..6fd70aa0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsCtField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 7670bacf..048f6ac5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsDeField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 04ace53b..0b3a0278 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsFlField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index 5defbe4f..0073531a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsIaField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index ccdbfa98..669e00bc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsMtField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index c51b9652..7dc74c52 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsNatField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 1b57a1c6..b14e5d79 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsNeField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 4b0016b7..2a47ee7f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsNhField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index a1282d17..23ef1e87 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsNjField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index 3c131c4e..de538b56 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsOrField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 5879e7df..110e8f1c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsTnField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 63f4ec18..d3b341c4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsTxField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 6d65cb51..50eba2b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsUtField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 64b5fe6f..59880c65 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsVaField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index c75ba981..b0e73173 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UspV1Field implements FieldKey { VERSION("Version"), NOTICE("Notice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 2e12e2d5..a87414aa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,5 +1,7 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.field.FieldKey; + public interface EncodableSection & FieldKey> { int getId(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 270686d0..5a911351 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -6,9 +6,9 @@ import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; +import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; import com.iab.gpp.encoder.field.UsCaField; -import com.iab.gpp.encoder.section.FieldKey; public abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 15c529d7..ae6256b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.section.FieldKey; +import com.iab.gpp.encoder.field.FieldKey; public interface EncodableSegment & FieldKey> { From 61524c49116d86eff409e7766b6f9446552af280 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 22:11:29 -0500 Subject: [PATCH 067/146] dry --- .../java/com/iab/gpp/encoder/GppModel.java | 49 +++++--- .../encoder/bitstring/BitStringEncoder.java | 52 --------- .../com/iab/gpp/encoder/field/FieldNames.java | 47 ++++---- .../com/iab/gpp/encoder/field/Fields.java | 71 ------------ .../iab/gpp/encoder/field/HeaderV1Field.java | 2 +- .../iab/gpp/encoder/field/TcfCaV1Field.java | 6 +- .../iab/gpp/encoder/field/TcfEuV2Field.java | 8 +- .../com/iab/gpp/encoder/field/UsCaField.java | 4 +- .../com/iab/gpp/encoder/field/UsCoField.java | 4 +- .../com/iab/gpp/encoder/field/UsCtField.java | 4 +- .../com/iab/gpp/encoder/field/UsDeField.java | 4 +- .../com/iab/gpp/encoder/field/UsFlField.java | 2 +- .../com/iab/gpp/encoder/field/UsIaField.java | 4 +- .../com/iab/gpp/encoder/field/UsMtField.java | 4 +- .../com/iab/gpp/encoder/field/UsNatField.java | 4 +- .../com/iab/gpp/encoder/field/UsNeField.java | 4 +- .../com/iab/gpp/encoder/field/UsNhField.java | 4 +- .../com/iab/gpp/encoder/field/UsNjField.java | 4 +- .../com/iab/gpp/encoder/field/UsOrField.java | 4 +- .../com/iab/gpp/encoder/field/UsTnField.java | 4 +- .../com/iab/gpp/encoder/field/UsTxField.java | 4 +- .../com/iab/gpp/encoder/field/UsUtField.java | 2 +- .../com/iab/gpp/encoder/field/UsVaField.java | 2 +- .../com/iab/gpp/encoder/field/UspV1Field.java | 2 +- .../AbstractLazilyEncodableSection.java | 75 +++++++++++-- .../gpp/encoder/section/EncodableSection.java | 26 ++--- .../com/iab/gpp/encoder/section/UsCa.java | 2 +- .../segment/AbstractBase64Segment.java | 38 +++++-- .../AbstractLazilyEncodableSegment.java | 105 ++++++++++++++---- .../gpp/encoder/segment/EncodableSegment.java | 18 +-- .../encoder/segment/HeaderV1CoreSegment.java | 6 +- .../encoder/segment/TcfCaV1CoreSegment.java | 32 +++--- .../TcfCaV1DisclosedVendorsSegment.java | 4 +- .../TcfCaV1PublisherPurposesSegment.java | 12 +- .../encoder/segment/TcfEuV2CoreSegment.java | 38 +++---- .../TcfEuV2PublisherPurposesSegment.java | 12 +- .../segment/TcfEuV2VendorsAllowedSegment.java | 4 +- .../TcfEuV2VendorsDisclosedSegment.java | 4 +- .../gpp/encoder/segment/UsCaCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsCaGpcSegment.java | 6 +- .../gpp/encoder/segment/UsCoCoreSegment.java | 22 ++-- .../gpp/encoder/segment/UsCoGpcSegment.java | 6 +- .../gpp/encoder/segment/UsCtCoreSegment.java | 22 ++-- .../gpp/encoder/segment/UsCtGpcSegment.java | 6 +- .../gpp/encoder/segment/UsDeCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsDeGpcSegment.java | 6 +- .../gpp/encoder/segment/UsFlCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsIaCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsIaGpcSegment.java | 6 +- .../gpp/encoder/segment/UsMtCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsMtGpcSegment.java | 6 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 32 +++--- .../gpp/encoder/segment/UsNatGpcSegment.java | 6 +- .../gpp/encoder/segment/UsNeCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsNeGpcSegment.java | 6 +- .../gpp/encoder/segment/UsNhCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsNhGpcSegment.java | 6 +- .../gpp/encoder/segment/UsNjCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsNjGpcSegment.java | 6 +- .../gpp/encoder/segment/UsOrCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsOrGpcSegment.java | 6 +- .../gpp/encoder/segment/UsTnCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsTnGpcSegment.java | 6 +- .../gpp/encoder/segment/UsTxCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsTxGpcSegment.java | 6 +- .../gpp/encoder/segment/UsUtCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsVaCoreSegment.java | 22 ++-- .../gpp/encoder/segment/UspV1CoreSegment.java | 24 ++-- 68 files changed, 599 insertions(+), 560 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 8c8bb223..5e3b4bca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.EncodableSection; import com.iab.gpp.encoder.section.HeaderV1; @@ -35,7 +36,7 @@ import com.iab.gpp.encoder.section.UspV1; public class GppModel { - private Map sections = new HashMap<>(); + private Map> sections = new HashMap<>(); private String encodedString; @@ -50,12 +51,16 @@ public GppModel(String encodedString) { decode(encodedString); } + public void setFieldValue(int sectionId, FieldKey fieldName, Object value) { + setFieldValue(sectionId, fieldName.getName(), value); + } + public void setFieldValue(int sectionId, String fieldName, Object value) { setFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName, value); } - private EncodableSection getOrCreateSection(String sectionName) { - EncodableSection section = this.sections.get(sectionName); + private EncodableSection getOrCreateSection(String sectionName) { + EncodableSection section = this.sections.get(sectionName); if (section == null) { switch(sectionName) { case TcfEuV2.NAME: @@ -123,13 +128,17 @@ private EncodableSection getOrCreateSection(String sectionName) { return section; } + public void setFieldValue(String sectionName, FieldKey fieldName, Object value) { + setFieldValue(sectionName, fieldName.getName(), value); + } + public void setFieldValue(String sectionName, String fieldName, Object value) { if (!this.decoded) { this.sections = this.decodeModel(this.encodedString); this.dirty = false; this.decoded = true; } - EncodableSection section = getOrCreateSection(sectionName); + EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.setFieldValue(fieldName, value); this.dirty = true; @@ -138,17 +147,25 @@ public void setFieldValue(String sectionName, String fieldName, Object value) { } } + public Object getFieldValue(int sectionId, FieldKey fieldName) { + return getFieldValue(sectionId, fieldName.getName()); + } + public Object getFieldValue(int sectionId, String fieldName) { return getFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); } + public Object getFieldValue(String sectionName, FieldKey fieldName) { + return getFieldValue(sectionName, fieldName.getName()); + } + public Object getFieldValue(String sectionName, String fieldName) { if (!this.decoded) { this.sections = this.decodeModel(this.encodedString); this.dirty = false; this.decoded = true; } - EncodableSection field = this.sections.get(sectionName); + EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.getFieldValue(fieldName); } else { @@ -166,7 +183,7 @@ public boolean hasField(String sectionName, String fieldName) { this.dirty = false; this.decoded = true; } - EncodableSection field = this.sections.get(sectionName); + EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.hasField(fieldName); } else { @@ -204,11 +221,11 @@ public HeaderV1 getHeader() { return header; } - public EncodableSection getSection(int sectionId) { + public EncodableSection getSection(int sectionId) { return getSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); } - public EncodableSection getSection(String sectionName) { + public EncodableSection getSection(String sectionName) { if (!this.decoded) { this.sections = this.decodeModel(this.encodedString); this.dirty = false; @@ -325,7 +342,7 @@ public List getSectionIds() { List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = this.sections.get(sectionName); + EncodableSection section = this.sections.get(sectionName); if (section != null) { sectionIds.add(section.getId()); } @@ -333,13 +350,13 @@ public List getSectionIds() { return sectionIds; } - protected String encodeModel(Map sections) { + protected String encodeModel(Map> sections) { int length = Sections.SECTION_ORDER.size(); List encodedSections = new ArrayList<>(length); List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = sections.get(sectionName); + EncodableSection section = sections.get(sectionName); if (section != null) { encodedSections.add(section.encodeCharSequence()); sectionIds.add(section.getId()); @@ -356,9 +373,9 @@ protected String encodeModel(Map sections) { return SlicedCharSequence.join('~', encodedSections).toString(); } - protected Map decodeModel(String str) { + protected Map> decodeModel(String str) { if (str == null || str.isEmpty() || str.startsWith("DB")) { - Map sections = new HashMap<>(); + Map> sections = new HashMap<>(); if(str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); @@ -434,7 +451,7 @@ protected Map decodeModel(String str) { return sections; } else if (str.startsWith("C")) { // old tcfeu only string - Map sections = new HashMap<>(); + Map> sections = new HashMap<>(); TcfEuV2 section = new TcfEuV2(str); sections.put(TcfEuV2.NAME, section); @@ -459,7 +476,7 @@ public String encodeSection(String sectionName) { this.dirty = false; this.decoded = true; } - EncodableSection section = this.sections.get(sectionName); + EncodableSection section = this.sections.get(sectionName); if (section != null) { return section.encode(); } else { @@ -478,7 +495,7 @@ public void decodeSection(String sectionName, String encodedString) { this.decoded = true; } - EncodableSection section = getOrCreateSection(sectionName); + EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.decode(encodedString); this.dirty = true; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java deleted file mode 100644 index 437bb046..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.iab.gpp.encoder.bitstring; - -import java.util.List; -import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; - -public final class BitStringEncoder { - - private static final BitStringEncoder instance = new BitStringEncoder(); - - private BitStringEncoder() { - - } - - public static BitStringEncoder getInstance() { - return instance; - } - - public BitStringBuilder encode(EncodableBitStringFields fields) { - BitStringBuilder bitString = new BitStringBuilder(); - List fieldNames = fields.getNames(); - for (int i = 0; i < fieldNames.size(); i++) { - AbstractEncodableBitStringDataType field = fields.get(i); - if (field != null) { - field.encode(bitString); - } else { - throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); - } - } - - return bitString; - } - - public void decode(BitString bitString, EncodableBitStringFields fields) { - List fieldNames = fields.getNames(); - BitStringReader reader = new BitStringReader(bitString); - for (int i = 0; i < fieldNames.size(); i++) { - AbstractEncodableBitStringDataType field = fields.get(i); - if (field != null) { - try { - field.decode(reader); - } catch (Exception e) { - throw new DecodingException("Unable to decode " + fieldNames.get(i), e); - } - } else { - throw new DecodingException("Field not found: '" + fieldNames.get(i) + "'"); - } - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index b62037e6..960d1829 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,36 +1,41 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.Collections; import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -public final class FieldNames { +public final class FieldNames & FieldKey> { - private final List list; - private final Map map; + private final E[] keys; + private final LinkedHashMap map; + private final Integer[] indices; - FieldNames(String... names) { - this.list = Collections.unmodifiableList(Arrays.asList(names)); + @SafeVarargs + FieldNames(E... keys) { + this.keys = keys; this.map = new LinkedHashMap<>(); - for (int i = 0; i < names.length; i++) { - this.map.put(names[i], i); + this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; + for (int i = 0; i < keys.length; i++) { + E key = keys[i]; + this.map.put(key.getName(), key); + this.indices[key.ordinal()] = i; } } - - public boolean contains(String name) { - return map.containsKey(name); + + public int size() { + return keys.length; } - - static final FieldNames of(String... names) { - return new FieldNames(names); + + public E get(int i) { + return keys[i]; } - - public List getNames() { - return list; + + public Integer getIndex(E key) { + if (key == null) { + return null; + } + return indices[key.ordinal()]; } - public Integer convertKey(String key) { + + public E convertKey(String key) { return map.get(key); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java deleted file mode 100644 index 107b5138..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.iab.gpp.encoder.field; - -import java.util.List; -import com.iab.gpp.encoder.datatype.DataType; - -public abstract class Fields> { - - private final FieldNames fieldNames; - private final Object[] values; - - protected Fields(FieldNames fieldNames) { - this.fieldNames = fieldNames; - this.values = new Object[fieldNames.getNames().size()]; - } - - public List getNames() { - return fieldNames.getNames(); - } - - public boolean containsKey(String key) { - Integer index = fieldNames.convertKey(key); - return index != null && values[index] != null; - } - - public void put(String key, T value) { - Integer index = fieldNames.convertKey(key); - if (index != null) { - values[index] = value; - } - } - - @SuppressWarnings("unchecked") - public T get(int index) { - return (T) values[index]; - } - - public T get(String key) { - Integer index = fieldNames.convertKey(key); - if (index != null) { - return get(index); - } - return null; - } - - public void reset(Fields fields) { - for (String name : fieldNames.getNames()) { - put(name, fields.get(name)); - } - } - - public boolean isDirty() { - int size = getNames().size(); - for (int i = 0; i < size; i++) { - T value = get(i); - if (value != null && value.isDirty()) { - return true; - } - } - return false; - } - - public void markClean() { - int size = getNames().size(); - for (int i = 0; i < size; i++) { - T value = get(i); - if (value != null) { - value.setDirty(false); - } - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 1dce80ad..91066c76 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -17,7 +17,7 @@ public String getName() { } //@formatter:off - public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 15846312..6fbe5960 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -40,7 +40,7 @@ public String getName() { } //@formatter:off - public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.VERSION, TcfCaV1Field.CREATED, TcfCaV1Field.LAST_UPDATED, @@ -61,7 +61,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, @@ -72,7 +72,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, TcfCaV1Field.DISCLOSED_VENDORS ); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 1b3062aa..5150a6db 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -43,7 +43,7 @@ public String getName() { } //@formatter:off - public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VERSION, TcfEuV2Field.CREATED, TcfEuV2Field.LAST_UPDATED, @@ -67,7 +67,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, TcfEuV2Field.PUBLISHER_CONSENTS, TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, @@ -78,14 +78,14 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED ); //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_DISCLOSED ); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index b44d9886..2dd3a51c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCaField.VERSION, UsCaField.SALE_OPT_OUT_NOTICE, UsCaField.SHARING_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCaField.GPC_SEGMENT_TYPE, UsCaField.GPC_SEGMENT_INCLUDED, UsCaField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 84cef9ee..a2366deb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -29,7 +29,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCoField.VERSION, UsCoField.SHARING_NOTICE, UsCoField.SALE_OPT_OUT_NOTICE, @@ -45,7 +45,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCoField.GPC_SEGMENT_TYPE, UsCoField.GPC_SEGMENT_INCLUDED, UsCoField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 6fd70aa0..dd605815 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -29,7 +29,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCtField.VERSION, UsCtField.SHARING_NOTICE, UsCtField.SALE_OPT_OUT_NOTICE, @@ -45,7 +45,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCtField.GPC_SEGMENT_TYPE, UsCtField.GPC_SEGMENT_INCLUDED, UsCtField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 048f6ac5..e8fe98b2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsDeField.VERSION, UsDeField.PROCESSING_NOTICE, UsDeField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsDeField.GPC_SEGMENT_TYPE, UsDeField.GPC_SEGMENT_INCLUDED, UsDeField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 0b3a0278..170e7ff9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -26,7 +26,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsFlField.VERSION, UsFlField.PROCESSING_NOTICE, UsFlField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index 0073531a..3b3bb7cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsIaField.VERSION, UsIaField.PROCESSING_NOTICE, UsIaField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsIaField.GPC_SEGMENT_TYPE, UsIaField.GPC_SEGMENT_INCLUDED, UsIaField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 669e00bc..07694812 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsMtField.VERSION, UsMtField.SHARING_NOTICE, UsMtField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsMtField.GPC_SEGMENT_TYPE, UsMtField.GPC_SEGMENT_INCLUDED, UsMtField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 7dc74c52..de9c3822 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -34,7 +34,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.VERSION, UsNatField.SHARING_NOTICE, UsNatField.SALE_OPT_OUT_NOTICE, @@ -55,7 +55,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index b14e5d79..a556270d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNeField.VERSION, UsNeField.PROCESSING_NOTICE, UsNeField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNeField.GPC_SEGMENT_TYPE, UsNeField.GPC_SEGMENT_INCLUDED, UsNeField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 2a47ee7f..7247c62e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNhField.VERSION, UsNhField.PROCESSING_NOTICE, UsNhField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNhField.GPC_SEGMENT_TYPE, UsNhField.GPC_SEGMENT_INCLUDED, UsNhField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 23ef1e87..d47d15b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNjField.VERSION, UsNjField.PROCESSING_NOTICE, UsNjField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNjField.GPC_SEGMENT_TYPE, UsNjField.GPC_SEGMENT_INCLUDED, UsNjField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index de538b56..f2faafa2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsOrField.VERSION, UsOrField.PROCESSING_NOTICE, UsOrField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsOrField.GPC_SEGMENT_TYPE, UsOrField.GPC_SEGMENT_INCLUDED, UsOrField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 110e8f1c..09477e53 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTnField.VERSION, UsTnField.PROCESSING_NOTICE, UsTnField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTnField.GPC_SEGMENT_TYPE, UsTnField.GPC_SEGMENT_INCLUDED, UsTnField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index d3b341c4..f441fe3b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTxField.VERSION, UsTxField.PROCESSING_NOTICE, UsTxField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTxField.GPC_SEGMENT_TYPE, UsTxField.GPC_SEGMENT_INCLUDED, UsTxField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 50eba2b8..3f7c3ab3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -26,7 +26,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsUtField.VERSION, UsUtField.SHARING_NOTICE, UsUtField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 59880c65..b6c1fd59 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -25,7 +25,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsVaField.VERSION, UsVaField.SHARING_NOTICE, UsVaField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index b0e73173..d7a9a96c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -18,7 +18,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UspV1Field.VERSION, UspV1Field.NOTICE, UspV1Field.OPT_OUT_SALE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 8b94a586..86f63345 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -2,11 +2,12 @@ import java.util.List; import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public abstract class AbstractLazilyEncodableSection implements EncodableSection { +abstract class AbstractLazilyEncodableSection & FieldKey> extends EncodableSection { - protected List segments; + protected List> segments; private CharSequence encodedString = null; @@ -17,11 +18,11 @@ protected AbstractLazilyEncodableSection() { this.segments = initializeSegments(); } - protected abstract List initializeSegments(); + protected abstract List> initializeSegments(); - protected abstract CharSequence encodeSection(List segments); + protected abstract CharSequence encodeSection(List> segments); - protected abstract List decodeSection(CharSequence encodedString); + protected abstract List> decodeSection(CharSequence encodedString); public boolean hasField(String fieldName) { if (!this.decoded) { @@ -32,7 +33,25 @@ public boolean hasField(String fieldName) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = segments.get(i); + if (segment.hasField(fieldName)) { + return true; + } + } + + return false; + } + + public boolean hasField(E fieldName) { + if (!this.decoded) { + this.segments = this.decodeSection(this.encodedString); + this.dirty = false; + this.decoded = true; + } + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if (segment.hasField(fieldName)) { return true; } @@ -50,7 +69,25 @@ public Object getFieldValue(String fieldName) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = segments.get(i); + if(segment.hasField(fieldName)) { + return segment.getFieldValue(fieldName); + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public Object getFieldValue(E fieldName) { + if (!this.decoded) { + this.segments = this.decodeSection(this.encodedString); + this.dirty = false; + this.decoded = true; + } + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if(segment.hasField(fieldName)) { return segment.getFieldValue(fieldName); } @@ -68,7 +105,27 @@ public void setFieldValue(String fieldName, Object value) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = segments.get(i); + if(segment.hasField(fieldName)) { + segment.setFieldValue(fieldName, value); + this.dirty = true; + return; + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public void setFieldValue(E fieldName, Object value) { + if (!this.decoded) { + this.segments = this.decodeSection(this.encodedString); + this.dirty = false; + this.decoded = true; + } + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if(segment.hasField(fieldName)) { segment.setFieldValue(fieldName, value); this.dirty = true; @@ -102,7 +159,7 @@ public void decode(CharSequence encodedString) { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); - for (EncodableSegment segment: segments) { + for (EncodableSegment segment: segments) { sb.append(", ").append(segment.toString()); } sb.append('}'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index a87414aa..f5661a06 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -2,29 +2,29 @@ import com.iab.gpp.encoder.field.FieldKey; -public interface EncodableSection & FieldKey> { +public abstract class EncodableSection & FieldKey> { - int getId(); + public abstract int getId(); - String getName(); + public abstract String getName(); - int getVersion(); + public abstract int getVersion(); - boolean hasField(E fieldName); + public abstract boolean hasField(E fieldName); - Object getFieldValue(E fieldName); + public abstract Object getFieldValue(E fieldName); - void setFieldValue(E fieldName, Object value); + public abstract void setFieldValue(E fieldName, Object value); - boolean hasField(String fieldName); + public abstract boolean hasField(String fieldName); - Object getFieldValue(String fieldName); + public abstract Object getFieldValue(String fieldName); - void setFieldValue(String fieldName, Object value); + public abstract void setFieldValue(String fieldName, Object value); - String encode(); + public abstract String encode(); - CharSequence encodeCharSequence(); + public abstract CharSequence encodeCharSequence(); - void decode(CharSequence encodedString); + public abstract void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 9e00e72f..7467d8f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -20,7 +20,7 @@ public UsCa() { } public UsCa(CharSequence encodedString) { - super(); + this(); decode(encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 5a911351..8e218ac1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -3,14 +3,14 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; +import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -import com.iab.gpp.encoder.field.UsCaField; -public abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { +abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { private final AbstractBase64UrlEncoder base64UrlEncoder; protected AbstractBase64Segment(FieldNames fieldNames, AbstractBase64UrlEncoder base64UrlEncoder) { @@ -20,20 +20,40 @@ protected AbstractBase64Segment(FieldNames fieldNames, AbstractBase64UrlEncod @Override protected final StringBuilder encodeSegment() { - BitStringBuilder bitString = fields.encode(); + BitStringBuilder bitString = new BitStringBuilder(); + int size = fieldNames.size(); + for (int i = 0; i < size; i++) { + AbstractEncodableBitStringDataType field = get(i); + if (field != null) { + field.encode(bitString); + } else { + throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); + } + } + return base64UrlEncoder.encode(bitString); } @Override protected final void decodeSegment(CharSequence encodedString) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } try { BitString bitString = decodeBitString(encodedString); - this.fields.decode(bitString); + int size = fieldNames.size(); + BitStringReader reader = new BitStringReader(bitString); + for (int i = 0; i < size; i++) { + AbstractEncodableBitStringDataType field = get(i); + if (field != null) { + try { + field.decode(reader); + } catch (Exception e) { + throw new DecodingException("Unable to decode " + fieldNames.get(i), e); + } + } else { + throw new DecodingException("Field not found: '" + fieldNames.get(i) + "'"); + } + } } catch (Exception e) { - throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); + throw new DecodingException("Unable to decode "+ getClass().getSimpleName() +" '" + encodedString + "'", e); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index d4f5f3c5..2b0bc22d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -4,9 +4,10 @@ import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.Fields; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.FieldNames; -public abstract class AbstractLazilyEncodableSegment> implements EncodableSegment { +abstract class AbstractLazilyEncodableSegment & FieldKey, T extends DataType> extends EncodableSegment { protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); @@ -19,34 +20,90 @@ public abstract class AbstractLazilyEncodableSegment> implem return true; }); - protected T fields; + protected final FieldNames fieldNames; + private final Object[] values; + + protected boolean containsKey(E key) { + Integer index = fieldNames.getIndex(key); + return index != null && values[index] != null; + } + + protected void initialize(E key, T value) { + Integer index = fieldNames.getIndex(key); + if (index == null) { + throw new IllegalArgumentException("invalid key "+ key); + } + values[index] = value; + } + + @SuppressWarnings("unchecked") + protected T get(int index) { + return (T) values[index]; + } + + protected T get(E key) { + Integer index = fieldNames.getIndex(key); + if (index != null) { + return get(index); + } + return null; + } + + protected boolean isDirty() { + int size = fieldNames.size(); + for (int i = 0; i < size; i++) { + T value = get(i); + if (value != null && value.isDirty()) { + return true; + } + } + return false; + } + + protected void markClean() { + int size = fieldNames.size(); + for (int i = 0; i < size; i++) { + T value = get(i); + if (value != null) { + value.setDirty(false); + } + } + } private CharSequence encodedString = null; private boolean decoded = true; - protected AbstractLazilyEncodableSegment() { - this.fields = initializeFields(); + protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { + this.fieldNames = fieldNames; + this.values = new Object[fieldNames.size()]; } - protected abstract T initializeFields(); + protected abstract StringBuilder encodeSegment(); - protected abstract StringBuilder encodeSegment(T fields); - - protected abstract void decodeSegment(CharSequence encodedString, T fields); + protected abstract void decodeSegment(CharSequence encodedString); public boolean hasField(String fieldName) { - return this.fields.containsKey(fieldName); + E key = fieldNames.convertKey(fieldName); + return key != null && hasField(key); + } + + public boolean hasField(E fieldName) { + return this.containsKey(fieldName); } public Object getFieldValue(String fieldName) { + return getFieldValue(fieldNames.convertKey(fieldName)); + } + + public Object getFieldValue(E fieldName) { if (!this.decoded) { - this.decodeSegment(this.encodedString, this.fields); - this.fields.markClean(); + this.decodeSegment(this.encodedString); + this.markClean(); this.decoded = true; } - DataType field = this.fields.get(fieldName); + DataType field = this.get(fieldName); if (field != null) { return field.getValue(); } else { @@ -55,13 +112,17 @@ public Object getFieldValue(String fieldName) { } public void setFieldValue(String fieldName, Object value) { + setFieldValue(fieldNames.convertKey(fieldName), value); + } + + public void setFieldValue(E fieldName, Object value) { if (!this.decoded) { - this.decodeSegment(this.encodedString, this.fields); - this.fields.markClean(); + this.decodeSegment(this.encodedString); + this.markClean(); this.decoded = true; } - DataType field = this.fields.get(fieldName); + DataType field = this.get(fieldName); if (field != null) { field.setValue(value); } else { @@ -70,9 +131,9 @@ public void setFieldValue(String fieldName, Object value) { } public CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.fields.isDirty()) { - this.encodedString = encodeSegment(this.fields); - this.fields.markClean(); + if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { + this.encodedString = encodeSegment(); + this.markClean(); this.decoded = true; } @@ -81,14 +142,16 @@ public CharSequence encodeCharSequence() { public void decode(CharSequence encodedString) { this.encodedString = encodedString; - this.fields.markClean(); + this.markClean(); this.decoded = false; } public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{name=").append(getClass().getSimpleName()); - for (String field : fields.getNames()) { + int size = fieldNames.size(); + for (int i = 0; i < size; i++) { + E field = fieldNames.get(i); if (hasField(field)) { sb.append(", ").append(field).append('=').append(getFieldValue(field)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index ae6256b8..5f05bbf4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -2,21 +2,21 @@ import com.iab.gpp.encoder.field.FieldKey; -public interface EncodableSegment & FieldKey> { +public abstract class EncodableSegment & FieldKey> { - boolean hasField(E fieldName); + public abstract boolean hasField(E fieldName); - Object getFieldValue(E fieldName); + public abstract Object getFieldValue(E fieldName); - void setFieldValue(E fieldName, Object value); + public abstract void setFieldValue(E fieldName, Object value); - boolean hasField(String fieldName); + public abstract boolean hasField(String fieldName); - Object getFieldValue(String fieldName); + public abstract Object getFieldValue(String fieldName); - void setFieldValue(String fieldName, Object value); + public abstract void setFieldValue(String fieldName, Object value); - CharSequence encodeCharSequence(); + public abstract CharSequence encodeCharSequence(); - void decode(CharSequence encodedString); + public abstract void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 7501e7b8..99d94b5e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -10,9 +10,9 @@ public final class HeaderV1CoreSegment extends AbstractBase64Segment { public UsCaCoreSegment() { super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); - fields.put(UsCaField.SALE_OPT_OUT_NOTICE, + initialize(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); + initialize(UsCaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SHARING_OPT_OUT_NOTICE, + initialize(UsCaField.SHARING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, + initialize(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SALE_OPT_OUT, + initialize(UsCaField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SHARING_OPT_OUT, + initialize(UsCaField.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SENSITIVE_DATA_PROCESSING, + initialize(UsCaField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 9) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 2) + initialize(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 2) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCaField.PERSONAL_DATA_CONSENTS, + initialize(UsCaField.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.MSPA_COVERED_TRANSACTION, + initialize(UsCaField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsCaField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsCaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 9dfbfb8c..398327b9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -10,9 +10,9 @@ public final class UsCaGpcSegment extends AbstractBase64Segment { public UsCaGpcSegment() { super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsCaField.GPC, new EncodableBoolean(false)); + initialize(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsCaField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index e98f50eb..7fd4a971 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -10,26 +10,26 @@ public final class UsCoCoreSegment extends AbstractBase64Segment { public UsCoCoreSegment() { super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); - fields.put(UsCoField.SHARING_NOTICE, + initialize(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); + initialize(UsCoField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.SALE_OPT_OUT_NOTICE, + initialize(UsCoField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.SALE_OPT_OUT, + initialize(UsCoField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsCoField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 7) + initialize(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 7) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.MSPA_COVERED_TRANSACTION, + initialize(UsCoField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsCoField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsCoField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 1da25138..33a9712f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -10,9 +10,9 @@ public final class UsCoGpcSegment extends AbstractBase64Segment { public UsCoGpcSegment() { super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsCoField.GPC, new EncodableBoolean(false)); + initialize(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsCoField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index 707ffc68..c9d477bb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -10,27 +10,27 @@ public final class UsCtCoreSegment extends AbstractBase64Segment { public UsCtCoreSegment() { super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); - fields.put(UsCtField.SHARING_NOTICE, + initialize(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); + initialize(UsCtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.SALE_OPT_OUT_NOTICE, + initialize(UsCtField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.SALE_OPT_OUT, + initialize(UsCtField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsCtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.SENSITIVE_DATA_PROCESSING, + initialize(UsCtField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCtField.MSPA_COVERED_TRANSACTION, + initialize(UsCtField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsCtField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsCtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index da0aa637..f12f2e39 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -10,9 +10,9 @@ public final class UsCtGpcSegment extends AbstractBase64Segment { public UsCtGpcSegment() { super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsCtField.GPC, new EncodableBoolean(false)); + initialize(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsCtField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index e4f2c9c7..991f0f0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -10,30 +10,30 @@ public final class UsDeCoreSegment extends AbstractBase64Segment { public UsDeCoreSegment() { super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); - fields.put(UsDeField.PROCESSING_NOTICE, + initialize(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); + initialize(UsDeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.SALE_OPT_OUT_NOTICE, + initialize(UsDeField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.SALE_OPT_OUT, + initialize(UsDeField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsDeField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.SENSITIVE_DATA_PROCESSING, + initialize(UsDeField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 9) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.MSPA_COVERED_TRANSACTION, + initialize(UsDeField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsDeField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsDeField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 628f0c21..06b1d870 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -10,9 +10,9 @@ public final class UsDeGpcSegment extends AbstractBase64Segment { public UsDeGpcSegment() { super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsDeField.GPC, new EncodableBoolean(false)); + initialize(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsDeField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 366cf2d8..259b662b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -10,29 +10,29 @@ public final class UsFlCoreSegment extends AbstractBase64Segment { public UsFlCoreSegment() { super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); - fields.put(UsFlField.PROCESSING_NOTICE, + initialize(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); + initialize(UsFlField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.SALE_OPT_OUT_NOTICE, + initialize(UsFlField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.SALE_OPT_OUT, + initialize(UsFlField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsFlField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.SENSITIVE_DATA_PROCESSING, + initialize(UsFlField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.MSPA_COVERED_TRANSACTION, + initialize(UsFlField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsFlField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsFlField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 9f5bb0a3..93e91101 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -10,29 +10,29 @@ public final class UsIaCoreSegment extends AbstractBase64Segment { public UsIaCoreSegment() { super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); - fields.put(UsIaField.PROCESSING_NOTICE, + initialize(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); + initialize(UsIaField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.SALE_OPT_OUT_NOTICE, + initialize(UsIaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, + initialize(UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.SALE_OPT_OUT, + initialize(UsIaField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsIaField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.SENSITIVE_DATA_PROCESSING, + initialize(UsIaField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.MSPA_COVERED_TRANSACTION, + initialize(UsIaField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsIaField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsIaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 5c5deb06..58e907c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -10,9 +10,9 @@ public final class UsIaGpcSegment extends AbstractBase64Segment { public UsIaGpcSegment() { super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsIaField.GPC, new EncodableBoolean(false)); + initialize(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsIaField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 72d52b8a..cd6ca67f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -10,29 +10,29 @@ public final class UsMtCoreSegment extends AbstractBase64Segment { public UsMtCoreSegment() { super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); - fields.put(UsMtField.SHARING_NOTICE, + initialize(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); + initialize(UsMtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.SALE_OPT_OUT_NOTICE, + initialize(UsMtField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.SALE_OPT_OUT, + initialize(UsMtField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsMtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.SENSITIVE_DATA_PROCESSING, + initialize(UsMtField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.MSPA_COVERED_TRANSACTION, + initialize(UsMtField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsMtField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsMtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 2d079e14..d59599ab 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -10,9 +10,9 @@ public final class UsMtGpcSegment extends AbstractBase64Segment { public UsMtGpcSegment() { super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsMtField.GPC, new EncodableBoolean(false)); + initialize(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsMtField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 90a58bb4..9ef5d553 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -12,37 +12,37 @@ public final class UsNatCoreSegment extends AbstractBase64Segment { public UsNatCoreSegment() { super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); - fields.put(UsNatField.SHARING_NOTICE, + initialize(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); + initialize(UsNatField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SALE_OPT_OUT_NOTICE, + initialize(UsNatField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SHARING_OPT_OUT_NOTICE, + initialize(UsNatField.SHARING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + initialize(UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, + initialize(UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SALE_OPT_OUT, + initialize(UsNatField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SHARING_OPT_OUT, + initialize(UsNatField.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsNatField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SENSITIVE_DATA_PROCESSING, + initialize(UsNatField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 16) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNatField.PERSONAL_DATA_CONSENTS, + initialize(UsNatField.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.MSPA_COVERED_TRANSACTION, + initialize(UsNatField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsNatField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsNatField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index d2eb4207..21fc6f61 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -10,9 +10,9 @@ public final class UsNatGpcSegment extends AbstractBase64Segment { public UsNatGpcSegment() { super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsNatField.GPC, new EncodableBoolean(false)); + initialize(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsNatField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index 51c18681..f8ae7039 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -10,29 +10,29 @@ public final class UsNeCoreSegment extends AbstractBase64Segment { public UsNeCoreSegment() { super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); - fields.put(UsNeField.PROCESSING_NOTICE, + initialize(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); + initialize(UsNeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.SALE_OPT_OUT_NOTICE, + initialize(UsNeField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.SALE_OPT_OUT, + initialize(UsNeField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsNeField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.SENSITIVE_DATA_PROCESSING, + initialize(UsNeField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.MSPA_COVERED_TRANSACTION, + initialize(UsNeField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsNeField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsNeField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 8353380b..dd46ccf5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -10,9 +10,9 @@ public final class UsNeGpcSegment extends AbstractBase64Segment { public UsNeGpcSegment() { super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsNeField.GPC, new EncodableBoolean(false)); + initialize(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsNeField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 7819025b..123eb828 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -10,29 +10,29 @@ public final class UsNhCoreSegment extends AbstractBase64Segment { public UsNhCoreSegment() { super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); - fields.put(UsNhField.PROCESSING_NOTICE, + initialize(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); + initialize(UsNhField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.SALE_OPT_OUT_NOTICE, + initialize(UsNhField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.SALE_OPT_OUT, + initialize(UsNhField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsNhField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.SENSITIVE_DATA_PROCESSING, + initialize(UsNhField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.MSPA_COVERED_TRANSACTION, + initialize(UsNhField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsNhField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsNhField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 75682713..0d4fc547 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -10,9 +10,9 @@ public final class UsNhGpcSegment extends AbstractBase64Segment { public UsNhGpcSegment() { super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsNhField.GPC, new EncodableBoolean(false)); + initialize(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsNhField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 566831fb..b536cb21 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -10,29 +10,29 @@ public final class UsNjCoreSegment extends AbstractBase64Segment { public UsNjCoreSegment() { super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); - fields.put(UsNjField.PROCESSING_NOTICE, + initialize(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); + initialize(UsNjField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.SALE_OPT_OUT_NOTICE, + initialize(UsNjField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.SALE_OPT_OUT, + initialize(UsNjField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsNjField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.SENSITIVE_DATA_PROCESSING, + initialize(UsNjField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 10) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) + initialize(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.MSPA_COVERED_TRANSACTION, + initialize(UsNjField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsNjField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsNjField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index e00f54c1..7c6c3d12 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -10,9 +10,9 @@ public final class UsNjGpcSegment extends AbstractBase64Segment { public UsNjGpcSegment() { super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsNjField.GPC, new EncodableBoolean(false)); + initialize(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsNjField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index ee928561..c4a913d5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -10,29 +10,29 @@ public final class UsOrCoreSegment extends AbstractBase64Segment { public UsOrCoreSegment() { super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); - fields.put(UsOrField.PROCESSING_NOTICE, + initialize(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); + initialize(UsOrField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.SALE_OPT_OUT_NOTICE, + initialize(UsOrField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.SALE_OPT_OUT, + initialize(UsOrField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsOrField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.SENSITIVE_DATA_PROCESSING, + initialize(UsOrField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 11) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.MSPA_COVERED_TRANSACTION, + initialize(UsOrField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsOrField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsOrField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 46a889a8..67b84aa3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -10,9 +10,9 @@ public final class UsOrGpcSegment extends AbstractBase64Segment { public UsOrGpcSegment() { super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsOrField.GPC, new EncodableBoolean(false)); + initialize(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsOrField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index f031154d..eea91bcd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -10,29 +10,29 @@ public final class UsTnCoreSegment extends AbstractBase64Segment { public UsTnCoreSegment() { super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); - fields.put(UsTnField.PROCESSING_NOTICE, + initialize(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); + initialize(UsTnField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.SALE_OPT_OUT_NOTICE, + initialize(UsTnField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.SALE_OPT_OUT, + initialize(UsTnField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsTnField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.SENSITIVE_DATA_PROCESSING, + initialize(UsTnField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.MSPA_COVERED_TRANSACTION, + initialize(UsTnField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsTnField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsTnField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index c2ad6387..bde63ca8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -10,9 +10,9 @@ public final class UsTnGpcSegment extends AbstractBase64Segment { public UsTnGpcSegment() { super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsTnField.GPC, new EncodableBoolean(false)); + initialize(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsTnField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 7e4b7b5d..de9e7238 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -10,29 +10,29 @@ public final class UsTxCoreSegment extends AbstractBase64Segment { public UsTxCoreSegment() { super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); - fields.put(UsTxField.PROCESSING_NOTICE, + initialize(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); + initialize(UsTxField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.SALE_OPT_OUT_NOTICE, + initialize(UsTxField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.SALE_OPT_OUT, + initialize(UsTxField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsTxField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.SENSITIVE_DATA_PROCESSING, + initialize(UsTxField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.MSPA_COVERED_TRANSACTION, + initialize(UsTxField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsTxField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsTxField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index a526f28a..1b3c65b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -10,8 +10,8 @@ public final class UsTxGpcSegment extends AbstractBase64Segment { public UsTxGpcSegment() { super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsTxField.GPC, new EncodableBoolean(false)); + initialize(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsTxField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 1fb16fb5..4dfcff44 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -10,29 +10,29 @@ public final class UsUtCoreSegment extends AbstractBase64Segment { public UsUtCoreSegment() { super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); - fields.put(UsUtField.SHARING_NOTICE, + initialize(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); + initialize(UsUtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.SALE_OPT_OUT_NOTICE, + initialize(UsUtField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + initialize(UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.SALE_OPT_OUT, + initialize(UsUtField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsUtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.SENSITIVE_DATA_PROCESSING, + initialize(UsUtField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.MSPA_COVERED_TRANSACTION, + initialize(UsUtField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsUtField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsUtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 159532f5..d3db2a0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -10,27 +10,27 @@ public final class UsVaCoreSegment extends AbstractBase64Segment { public UsVaCoreSegment() { super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); - fields.put(UsVaField.SHARING_NOTICE, + initialize(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); + initialize(UsVaField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.SALE_OPT_OUT_NOTICE, + initialize(UsVaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.SALE_OPT_OUT, + initialize(UsVaField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsVaField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.SENSITIVE_DATA_PROCESSING, + initialize(UsVaField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.MSPA_COVERED_TRANSACTION, + initialize(UsVaField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsVaField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsVaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 2acfcd47..b66807ba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -11,19 +11,19 @@ public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment v == 'Y' || v == 'N' || v == '-'))); - fields.put(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); - fields.put(UspV1Field.LSPA_COVERED, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + initialize(UspV1Field.VERSION, new UnencodableInteger(UspV1.VERSION)); + initialize(UspV1Field.NOTICE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + initialize(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + initialize(UspV1Field.LSPA_COVERED, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); } @Override protected StringBuilder encodeSegment() { StringBuilder str = new StringBuilder(); - str.append(fields.get(UspV1Field.VERSION).getValue()); - str.append(fields.get(UspV1Field.NOTICE).getValue()); - str.append(fields.get(UspV1Field.OPT_OUT_SALE).getValue()); - str.append(fields.get(UspV1Field.LSPA_COVERED).getValue()); + str.append(get(UspV1Field.VERSION).getValue()); + str.append(get(UspV1Field.NOTICE).getValue()); + str.append(get(UspV1Field.OPT_OUT_SALE).getValue()); + str.append(get(UspV1Field.LSPA_COVERED).getValue()); return str; } @@ -34,10 +34,10 @@ protected void decodeSegment(CharSequence encodedString) { } try { - fields.get(UspV1Field.VERSION).setValue((int)(encodedString.charAt(0) - '0')); - fields.get(UspV1Field.NOTICE).setValue(encodedString.charAt(1)); - fields.get(UspV1Field.OPT_OUT_SALE).setValue(encodedString.charAt(2)); - fields.get(UspV1Field.LSPA_COVERED).setValue(encodedString.charAt(3)); + get(UspV1Field.VERSION).setValue((int)(encodedString.charAt(0) - '0')); + get(UspV1Field.NOTICE).setValue(encodedString.charAt(1)); + get(UspV1Field.OPT_OUT_SALE).setValue(encodedString.charAt(2)); + get(UspV1Field.LSPA_COVERED).setValue(encodedString.charAt(3)); } catch (Exception e) { throw new DecodingException("Unable to decode UspV1CoreSegment '" + encodedString + "'", e); } From 842af4224a8198aaf5772b5cfac8512d64d3fdba Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 17:13:25 -0500 Subject: [PATCH 068/146] dry --- .../AbstractLazilyEncodableSection.java | 146 ++++++++++-------- .../com/iab/gpp/encoder/section/HeaderV1.java | 39 +---- .../com/iab/gpp/encoder/section/TcfCaV1.java | 69 ++++----- .../com/iab/gpp/encoder/section/TcfEuV2.java | 79 +++++----- .../com/iab/gpp/encoder/section/UsCa.java | 41 ++--- .../com/iab/gpp/encoder/section/UsCo.java | 43 ++---- .../com/iab/gpp/encoder/section/UsCt.java | 43 ++---- .../com/iab/gpp/encoder/section/UsDe.java | 43 ++---- .../com/iab/gpp/encoder/section/UsFl.java | 37 +---- .../com/iab/gpp/encoder/section/UsIa.java | 43 ++---- .../com/iab/gpp/encoder/section/UsMt.java | 43 ++---- .../com/iab/gpp/encoder/section/UsNat.java | 43 ++---- .../com/iab/gpp/encoder/section/UsNe.java | 43 ++---- .../com/iab/gpp/encoder/section/UsNh.java | 43 ++---- .../com/iab/gpp/encoder/section/UsNj.java | 43 ++---- .../com/iab/gpp/encoder/section/UsOr.java | 43 ++---- .../com/iab/gpp/encoder/section/UsTn.java | 43 ++---- .../com/iab/gpp/encoder/section/UsTx.java | 43 ++---- .../com/iab/gpp/encoder/section/UsUt.java | 37 +---- .../com/iab/gpp/encoder/section/UsVa.java | 37 +---- .../com/iab/gpp/encoder/section/UspV1.java | 37 +---- 21 files changed, 367 insertions(+), 671 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 86f63345..3809faa2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -1,40 +1,65 @@ package com.iab.gpp.encoder.section; +import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; abstract class AbstractLazilyEncodableSection & FieldKey> extends EncodableSection { - protected List> segments; + protected final List> segments; private CharSequence encodedString = null; - private boolean dirty = false; private boolean decoded = true; - protected AbstractLazilyEncodableSection() { - this.segments = initializeSegments(); + protected AbstractLazilyEncodableSection(List> segments) { + this.segments = segments; } - protected abstract List> initializeSegments(); - - protected abstract CharSequence encodeSection(List> segments); - - protected abstract List> decodeSection(CharSequence encodedString); + protected void decodeSection(CharSequence encodedString) { + int numSegments = segments.size(); + if (numSegments == 1) { + segments.get(0).decode(encodedString); + return; + } + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < numSegments; i++) { + segments.get(i).decode(encodedSegments.get(i)); + } + } - public boolean hasField(String fieldName) { + protected CharSequence encodeSection() { + int numSegments = segments.size(); + if (numSegments == 1) { + return segments.get(0).encodeCharSequence(); + } + List encodedSegments = new ArrayList<>(numSegments); + for (int i = 0; i < numSegments; i++) { + encodedSegments.add(segments.get(i).encodeCharSequence()); + } + return SlicedCharSequence.join('.', encodedSegments); + } + + private void ensureDecode() { if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; + if(encodedString != null && encodedString.length() > 0) { + this.decodeSection(encodedString); + } + this.setDirty(false); this.decoded = true; } + } + + public final boolean hasField(String fieldName) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if (segment.hasField(fieldName)) { + if (segment.getField(fieldName) != null) { return true; } } @@ -42,17 +67,13 @@ public boolean hasField(String fieldName) { return false; } - public boolean hasField(E fieldName) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + public final boolean hasField(E fieldName) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if (segment.hasField(fieldName)) { + if (segment.getField(fieldName) != null) { return true; } } @@ -60,55 +81,45 @@ public boolean hasField(E fieldName) { return false; } - public Object getFieldValue(String fieldName) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + public final Object getFieldValue(String fieldName) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if(segment.hasField(fieldName)) { - return segment.getFieldValue(fieldName); + DataType field = segment.getField(fieldName); + if (field != null) { + return field.getValue(); } } throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public Object getFieldValue(E fieldName) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + public final Object getFieldValue(E fieldName) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if(segment.hasField(fieldName)) { - return segment.getFieldValue(fieldName); + DataType field = segment.getField(fieldName); + if (field != null) { + return field.getValue(); } } throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public void setFieldValue(String fieldName, Object value) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + public final void setFieldValue(String fieldName, Object value) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if(segment.hasField(fieldName)) { - segment.setFieldValue(fieldName, value); - this.dirty = true; + DataType field = segment.getField(fieldName); + if(field != null) { + field.setValue(value); return; } } @@ -117,18 +128,14 @@ public void setFieldValue(String fieldName, Object value) { } public void setFieldValue(E fieldName, Object value) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if(segment.hasField(fieldName)) { - segment.setFieldValue(fieldName, value); - this.dirty = true; + DataType field = segment.getField(fieldName); + if(field != null) { + field.setValue(value); return; } } @@ -136,27 +143,44 @@ public void setFieldValue(E fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public String encode() { + public final String encode() { return encodeCharSequence().toString(); } - public CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.dirty) { - this.encodedString = this.encodeSection(this.segments); - this.dirty = false; + public final CharSequence encodeCharSequence() { + if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { + this.encodedString = this.encodeSection(); + this.setDirty(false); this.decoded = true; } return this.encodedString; } - public void decode(CharSequence encodedString) { + public final void decode(CharSequence encodedString) { this.encodedString = encodedString; - this.dirty = false; + this.setDirty(false); this.decoded = false; } + + public final boolean isDirty() { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + if (segments.get(i).isDirty()) { + return true; + } + } + return false; + } + + public final void setDirty(boolean dirty) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + segments.get(i).setDirty(dirty); + } + } - public String toString() { + public final String toString() { StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); for (EncodableSegment segment: segments) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index c7dcfb25..4d3742b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -1,11 +1,8 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.field.HeaderV1Field; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; public class HeaderV1 extends AbstractLazilyEncodableSection { @@ -15,11 +12,11 @@ public class HeaderV1 extends AbstractLazilyEncodableSection { public static final String NAME = "header"; public HeaderV1() { - super(); + super(Collections.singletonList(new HeaderV1CoreSegment())); } public HeaderV1(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -38,39 +35,7 @@ public int getVersion() { return HeaderV1.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new HeaderV1CoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i=0; i i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public IntegerSet getSectionsIds() { return (IntegerSet) this.getFieldValue(HeaderV1Field.SECTION_IDS); } - - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 5d1639ce..be9c5e98 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -21,11 +21,11 @@ public class TcfCaV1 extends AbstractLazilyEncodableSection { public static final String NAME = "tcfcav1"; public TcfCaV1() { - super(); + super(Arrays.>asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment())); } public TcfCaV1(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -45,49 +45,40 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); - } - - @Override - public List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < encodedSegments.size(); i++) { - - /** - * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. - * - * A-H = '000' = 0 - * I-P = '001' = 1 - * Y-Z,a-f = '011' = 3 - * - * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved - * for the encoding version which only coincidentally works here because the version value is less than 8. - */ - - CharSequence encodedSegment = encodedSegments.get(i); - if (encodedSegment.length() > 0) { - char firstChar = encodedSegment.charAt(0); - - if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegment); - } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(2).decode(encodedSegment); - } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegment); - } else { - throw new DecodingException("Invalid segment '" + encodedSegment + "'"); - } + public void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < encodedSegments.size(); i++) { + + /** + * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. + * + * A-H = '000' = 0 + * I-P = '001' = 1 + * Y-Z,a-f = '011' = 3 + * + * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved + * for the encoding version which only coincidentally works here because the version value is less than 8. + */ + + CharSequence encodedSegment = encodedSegments.get(i); + if (encodedSegment.length() > 0) { + char firstChar = encodedSegment.charAt(0); + + if(firstChar >= 'A' && firstChar <= 'H') { + segments.get(0).decode(encodedSegment); + } else if(firstChar >= 'I' && firstChar <= 'P') { + segments.get(2).decode(encodedSegment); + } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { + segments.get(1).decode(encodedSegment); + } else { + throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } } } - - return segments; } @Override - public CharSequence encodeSection(List> segments) { + public CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 7aaf4989..ba70c5c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -22,11 +22,11 @@ public class TcfEuV2 extends AbstractLazilyEncodableSection { public static final String NAME = "tcfeuv2"; public TcfEuV2() { - super(); + super(Arrays.>asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment())); } public TcfEuV2(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -46,53 +46,44 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); - } - - @Override - public List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < encodedSegments.size(); i++) { - - /** - * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. - * - * A-H = '000' = 0 - * I-P = '001' = 1 - * Q-X = '010' = 2 - * Y-Z,a-f = '011' = 3 - * - * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved - * for the encoding version which only coincidentally works here because the version value is less than 8. - */ - - CharSequence encodedSegment = encodedSegments.get(i); - if (encodedSegment.length() > 0) { - char firstChar = encodedSegment.charAt(0); - - // unfortunately, the segment ordering doesn't match the segment ids - if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegment); - } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(3).decode(encodedSegment); - } else if(firstChar >= 'Q' && firstChar <= 'X') { - segments.get(2).decode(encodedSegment); - } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegment); - } else { - throw new DecodingException("Invalid segment '" + encodedSegment + "'"); - } + public void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < encodedSegments.size(); i++) { + + /** + * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. + * + * A-H = '000' = 0 + * I-P = '001' = 1 + * Q-X = '010' = 2 + * Y-Z,a-f = '011' = 3 + * + * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved + * for the encoding version which only coincidentally works here because the version value is less than 8. + */ + + CharSequence encodedSegment = encodedSegments.get(i); + if (encodedSegment.length() > 0) { + char firstChar = encodedSegment.charAt(0); + + // unfortunately, the segment ordering doesn't match the segment ids + if(firstChar >= 'A' && firstChar <= 'H') { + segments.get(0).decode(encodedSegment); + } else if(firstChar >= 'I' && firstChar <= 'P') { + segments.get(3).decode(encodedSegment); + } else if(firstChar >= 'Q' && firstChar <= 'X') { + segments.get(2).decode(encodedSegment); + } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { + segments.get(1).decode(encodedSegment); + } else { + throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } } } - - return segments; } @Override - public CharSequence encodeSection(List> segments) { + public CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -117,7 +108,7 @@ public CharSequence encodeSection(List> segments) } @Override - public void setFieldValue(String fieldName, Object value) throws InvalidFieldException { + public void setFieldValue(TcfEuV2Field fieldName, Object value) throws InvalidFieldException { super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 7467d8f6..760ef5fc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -16,7 +16,7 @@ public class UsCa extends AbstractLazilyEncodableSection { public static final String NAME = "usca"; public UsCa() { - super(); + super(Arrays.>asList(new UsCaCoreSegment(), new UsCaGpcSegment())); } public UsCa(CharSequence encodedString) { @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsCaCoreSegment(), new UsCaGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 91e3adae..387377cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -16,11 +16,11 @@ public class UsCo extends AbstractLazilyEncodableSection { public static final String NAME = "usco"; public UsCo() { - super(); + super(Arrays.>asList(new UsCoCoreSegment(), new UsCoGpcSegment())); } public UsCo(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsCoCoreSegment(), new UsCoGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 225fbc3a..6f218dda 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -16,11 +16,11 @@ public class UsCt extends AbstractLazilyEncodableSection { public static final String NAME = "usct"; public UsCt() { - super(); + super(Arrays.>asList(new UsCtCoreSegment(), new UsCtGpcSegment())); } public UsCt(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsCtCoreSegment(), new UsCtGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index de0ac909..8a9e8972 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -16,11 +16,11 @@ public class UsDe extends AbstractLazilyEncodableSection { public static final String NAME = "usde"; public UsDe() { - super(); + super(Arrays.>asList(new UsDeCoreSegment(), new UsDeGpcSegment())); } public UsDe(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsDeCoreSegment(), new UsDeGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if (!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if (segments.size() >= 2 && segments.get(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if (segments.size() >= 2 && segments.get(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 771e6278..42b8922b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -1,11 +1,8 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsFlCoreSegment; public class UsFl extends AbstractLazilyEncodableSection { @@ -15,11 +12,11 @@ public class UsFl extends AbstractLazilyEncodableSection { public static final String NAME = "usfl"; public UsFl() { - super(); + super(Collections.singletonList(new UsFlCoreSegment())); } public UsFl(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -38,36 +35,6 @@ public int getVersion() { return UsFl.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new UsFlCoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i = 0; i < segments.size(); i++) { - if (encodedSegments.size() > i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for (EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsFlField.PROCESSING_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index d19650e7..6757ab79 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -16,11 +16,11 @@ public class UsIa extends AbstractLazilyEncodableSection { public static final String NAME = "usia"; public UsIa() { - super(); + super(Arrays.>asList(new UsIaCoreSegment(), new UsIaGpcSegment())); } public UsIa(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsIaCoreSegment(), new UsIaGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if (!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if (segments.size() >= 2 && segments.get(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if (segments.size() >= 2 && segments.get(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 0e5a0df9..ddbb8b8e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -16,11 +16,11 @@ public class UsMt extends AbstractLazilyEncodableSection { public static final String NAME = "usmt"; public UsMt() { - super(); + super(Arrays.>asList(new UsMtCoreSegment(), new UsMtGpcSegment())); } public UsMt(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsMtCoreSegment(), new UsMtGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 480178f3..3b466f74 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -16,11 +16,11 @@ public class UsNat extends AbstractLazilyEncodableSection { public static final String NAME = "usnat"; public UsNat() { - super(); + super(Arrays.>asList(new UsNatCoreSegment(), new UsNatGpcSegment())); } public UsNat(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsNatCoreSegment(), new UsNatGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index e4d4f32e..5e5b287c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -16,11 +16,11 @@ public class UsNe extends AbstractLazilyEncodableSection { public static final String NAME = "usne"; public UsNe() { - super(); + super(Arrays.>asList(new UsNeCoreSegment(), new UsNeGpcSegment())); } public UsNe(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsNeCoreSegment(), new UsNeGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index fbeae34a..99f46231 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -16,11 +16,11 @@ public class UsNh extends AbstractLazilyEncodableSection { public static final String NAME = "usnh"; public UsNh() { - super(); + super(Arrays.>asList(new UsNhCoreSegment(), new UsNhGpcSegment())); } public UsNh(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsNhCoreSegment(), new UsNhGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index bf5297cf..67c43218 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -16,11 +16,11 @@ public class UsNj extends AbstractLazilyEncodableSection { public static final String NAME = "usnj"; public UsNj() { - super(); + super(Arrays.>asList(new UsNjCoreSegment(), new UsNjGpcSegment())); } public UsNj(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsNjCoreSegment(), new UsNjGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 97c771e5..0ee0bfd1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -16,11 +16,11 @@ public class UsOr extends AbstractLazilyEncodableSection { public static final String NAME = "usor"; public UsOr() { - super(); + super(Arrays.>asList(new UsOrCoreSegment(), new UsOrGpcSegment())); } public UsOr(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsOrCoreSegment(), new UsOrGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index e582d57d..2efd6748 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -16,11 +16,11 @@ public class UsTn extends AbstractLazilyEncodableSection { public static final String NAME = "ustn"; public UsTn() { - super(); + super(Arrays.>asList(new UsTnCoreSegment(), new UsTnGpcSegment())); } public UsTn(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsTnCoreSegment(), new UsTnGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString,'.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString,'.'); - - if(encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if(encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); - } + if(encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if(encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 2f7f2e70..5c23bef2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -16,11 +16,11 @@ public class UsTx extends AbstractLazilyEncodableSection { public static final String NAME = "ustx"; public UsTx() { - super(); + super(Arrays.>asList(new UsTxCoreSegment(), new UsTxGpcSegment())); } public UsTx(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsTxCoreSegment(), new UsTxGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index caec1ae6..52530473 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -1,11 +1,8 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsUtCoreSegment; public class UsUt extends AbstractLazilyEncodableSection { @@ -15,11 +12,11 @@ public class UsUt extends AbstractLazilyEncodableSection { public static final String NAME = "usut"; public UsUt() { - super(); + super(Collections.singletonList(new UsUtCoreSegment())); } public UsUt(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -38,36 +35,6 @@ public int getVersion() { return UsUt.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new UsUtCoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i = 0; i < segments.size(); i++) { - if (encodedSegments.size() > i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsUtField.SHARING_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index efd499ee..33b267ba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -1,11 +1,8 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsVaCoreSegment; public class UsVa extends AbstractLazilyEncodableSection { @@ -15,11 +12,11 @@ public class UsVa extends AbstractLazilyEncodableSection { public static final String NAME = "usva"; public UsVa() { - super(); + super(Collections.singletonList(new UsVaCoreSegment())); } public UsVa(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -38,36 +35,6 @@ public int getVersion() { return UsVa.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new UsVaCoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i = 0; i < segments.size(); i++) { - if (encodedSegments.size() > i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for (EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsVaField.SHARING_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index ef76b18d..fff8469c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.field.UspV1Field; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UspV1CoreSegment; public class UspV1 extends AbstractLazilyEncodableSection { @@ -14,11 +11,11 @@ public class UspV1 extends AbstractLazilyEncodableSection { public static final String NAME = "uspv1"; public UspV1() { - super(); + super(Collections.singletonList(new UspV1CoreSegment())); } public UspV1(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -37,36 +34,6 @@ public int getVersion() { return UspV1.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new UspV1CoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i=0; i < segments.size(); i++) { - if (encodedSegments.size() > i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public Character getNotice() { return (Character) this.getFieldValue(UspV1Field.NOTICE); } From 80abb082db324980411e28d8d5511fdf8f6daee9 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 17:24:12 -0500 Subject: [PATCH 069/146] use an abstract method --- .../gpp/encoder/segment/AbstractBase64Segment.java | 13 ++++++++----- .../gpp/encoder/segment/HeaderV1CoreSegment.java | 3 +-- .../iab/gpp/encoder/segment/TcfCaV1CoreSegment.java | 3 +-- .../segment/TcfCaV1DisclosedVendorsSegment.java | 3 +-- .../segment/TcfCaV1PublisherPurposesSegment.java | 3 +-- .../iab/gpp/encoder/segment/TcfEuV2CoreSegment.java | 7 ++++++- .../segment/TcfEuV2PublisherPurposesSegment.java | 7 ++++++- .../segment/TcfEuV2VendorsAllowedSegment.java | 6 +++++- .../segment/TcfEuV2VendorsDisclosedSegment.java | 7 ++++++- .../iab/gpp/encoder/segment/UsCaCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsCaGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsCoCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsCoGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsCtCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsCtGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsDeCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsDeGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsFlCoreSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsIaCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsIaGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsMtCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsMtGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNatCoreSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNatGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNeCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsNeGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNhCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsNhGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNjCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsNjGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsOrCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsOrGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsTnCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsTnGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsTxCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsTxGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsUtCoreSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsVaCoreSegment.java | 3 +-- 38 files changed, 64 insertions(+), 75 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 8e218ac1..46317017 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; @@ -12,10 +13,12 @@ abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { - private final AbstractBase64UrlEncoder base64UrlEncoder; - protected AbstractBase64Segment(FieldNames fieldNames, AbstractBase64UrlEncoder base64UrlEncoder) { + protected AbstractBase64Segment(FieldNames fieldNames) { super(fieldNames); - this.base64UrlEncoder = base64UrlEncoder; + } + + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return CompressedBase64UrlEncoder.getInstance(); } @Override @@ -31,7 +34,7 @@ protected final StringBuilder encodeSegment() { } } - return base64UrlEncoder.encode(bitString); + return getBase64UrlEncoder().encode(bitString); } @Override @@ -58,7 +61,7 @@ protected final void decodeSegment(CharSequence encodedString) { } protected BitString decodeBitString(CharSequence encodedString) { - return base64UrlEncoder.decode(encodedString); + return getBase64UrlEncoder().decode(encodedString); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 99d94b5e..3e926695 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.field.HeaderV1Field; @@ -9,7 +8,7 @@ public final class HeaderV1CoreSegment extends AbstractBase64Segment { public HeaderV1CoreSegment() { - super(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); initialize(HeaderV1Field.ID, new EncodableFixedInteger(6, HeaderV1.ID)); initialize(HeaderV1Field.VERSION, new EncodableFixedInteger(6, HeaderV1.VERSION)); initialize(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 3630ac56..fb0151f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.time.Instant; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -15,7 +14,7 @@ public final class TcfCaV1CoreSegment extends AbstractBase64Segment { public TcfCaV1CoreSegment() { - super(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); // NOTE: TcfCaV1.setFieldValue records modifications Instant date = Instant.EPOCH; initialize(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 33f0037f..939cfbad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfCaV1Field; @@ -8,7 +7,7 @@ public final class TcfCaV1DisclosedVendorsSegment extends AbstractBase64Segment { public TcfCaV1DisclosedVendorsSegment() { - super(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); initialize(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); initialize(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 57519730..62f7f82f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.function.IntSupplier; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; @@ -10,7 +9,7 @@ public final class TcfCaV1PublisherPurposesSegment extends AbstractBase64Segment { public TcfCaV1PublisherPurposesSegment() { - super(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); initialize(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); initialize(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); initialize(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 7c4ead4e..65e77b56 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.segment; import java.time.Instant; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; @@ -15,7 +16,7 @@ public final class TcfEuV2CoreSegment extends AbstractBase64Segment { public TcfEuV2CoreSegment() { - super(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); + super(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); // NOTE: TcfEuV2.setFieldValue records modifications Instant date = Instant.EPOCH; @@ -41,4 +42,8 @@ public TcfEuV2CoreSegment() { initialize(TcfEuV2Field.PUBLISHER_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, false)); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index f98ddd57..3cd9ecce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.segment; import java.util.function.IntSupplier; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -10,7 +11,7 @@ public final class TcfEuV2PublisherPurposesSegment extends AbstractBase64Segment { public TcfEuV2PublisherPurposesSegment() { - super(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); + super(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); initialize(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); initialize(TcfEuV2Field.PUBLISHER_CONSENTS, new EncodableFixedBitfield(24)); initialize(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); @@ -34,4 +35,8 @@ public int getAsInt() { new EncodableFlexibleBitfield(getLengthSupplier)); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index e9f86810..608d9653 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -8,9 +9,12 @@ public final class TcfEuV2VendorsAllowedSegment extends AbstractBase64Segment { public TcfEuV2VendorsAllowedSegment() { - super(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); + super(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); initialize(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, new EncodableFixedInteger(3, 2)); initialize(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange()); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 0ad39850..c73b21ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -8,9 +9,13 @@ public final class TcfEuV2VendorsDisclosedSegment extends AbstractBase64Segment { public TcfEuV2VendorsDisclosedSegment() { - super(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); + super(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); initialize(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); initialize(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange()); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 1e2dc093..69d87f9d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; @@ -9,7 +8,7 @@ public final class UsCaCoreSegment extends AbstractBase64Segment { public UsCaCoreSegment() { - super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); initialize(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); initialize(UsCaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 398327b9..47813843 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsCaGpcSegment extends AbstractBase64Segment { public UsCaGpcSegment() { - super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); initialize(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsCaField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 7fd4a971..2fdd170c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; @@ -9,7 +8,7 @@ public final class UsCoCoreSegment extends AbstractBase64Segment { public UsCoCoreSegment() { - super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); initialize(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); initialize(UsCoField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 33a9712f..884e6b0e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsCoGpcSegment extends AbstractBase64Segment { public UsCoGpcSegment() { - super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); initialize(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsCoField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index c9d477bb..bfda454c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; @@ -9,7 +8,7 @@ public final class UsCtCoreSegment extends AbstractBase64Segment { public UsCtCoreSegment() { - super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); initialize(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); initialize(UsCtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index f12f2e39..b6aea217 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsCtGpcSegment extends AbstractBase64Segment { public UsCtGpcSegment() { - super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); initialize(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsCtField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 991f0f0c..45404a78 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; @@ -9,7 +8,7 @@ public final class UsDeCoreSegment extends AbstractBase64Segment { public UsDeCoreSegment() { - super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); initialize(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); initialize(UsDeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 06b1d870..f23ae86c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsDeGpcSegment extends AbstractBase64Segment { public UsDeGpcSegment() { - super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); initialize(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsDeField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 259b662b..315fbdcb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; @@ -9,7 +8,7 @@ public final class UsFlCoreSegment extends AbstractBase64Segment { public UsFlCoreSegment() { - super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); initialize(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); initialize(UsFlField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 93e91101..2e39d723 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; @@ -9,7 +8,7 @@ public final class UsIaCoreSegment extends AbstractBase64Segment { public UsIaCoreSegment() { - super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); initialize(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); initialize(UsIaField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 58e907c3..99588b5d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsIaGpcSegment extends AbstractBase64Segment { public UsIaGpcSegment() { - super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); initialize(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsIaField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index cd6ca67f..1a9c8099 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; @@ -9,7 +8,7 @@ public final class UsMtCoreSegment extends AbstractBase64Segment { public UsMtCoreSegment() { - super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); initialize(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); initialize(UsMtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index d59599ab..7caa3f4a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsMtGpcSegment extends AbstractBase64Segment { public UsMtGpcSegment() { - super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); initialize(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsMtField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 9ef5d553..f2ee5ad3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -11,7 +10,7 @@ public final class UsNatCoreSegment extends AbstractBase64Segment { public UsNatCoreSegment() { - super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); initialize(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); initialize(UsNatField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 21fc6f61..f7ab9ba6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsNatGpcSegment extends AbstractBase64Segment { public UsNatGpcSegment() { - super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); initialize(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsNatField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index f8ae7039..a1eda150 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; @@ -9,7 +8,7 @@ public final class UsNeCoreSegment extends AbstractBase64Segment { public UsNeCoreSegment() { - super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); initialize(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); initialize(UsNeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index dd46ccf5..01456505 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsNeGpcSegment extends AbstractBase64Segment { public UsNeGpcSegment() { - super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); initialize(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsNeField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 123eb828..1376ec01 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; @@ -9,7 +8,7 @@ public final class UsNhCoreSegment extends AbstractBase64Segment { public UsNhCoreSegment() { - super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); initialize(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); initialize(UsNhField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 0d4fc547..9abeebb8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsNhGpcSegment extends AbstractBase64Segment { public UsNhGpcSegment() { - super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); initialize(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsNhField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index b536cb21..f8809920 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; @@ -9,7 +8,7 @@ public final class UsNjCoreSegment extends AbstractBase64Segment { public UsNjCoreSegment() { - super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); initialize(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); initialize(UsNjField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 7c6c3d12..c651e912 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsNjGpcSegment extends AbstractBase64Segment { public UsNjGpcSegment() { - super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); initialize(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsNjField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index c4a913d5..c06f095d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; @@ -9,7 +8,7 @@ public final class UsOrCoreSegment extends AbstractBase64Segment { public UsOrCoreSegment() { - super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); initialize(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); initialize(UsOrField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 67b84aa3..aaacbc33 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsOrGpcSegment extends AbstractBase64Segment { public UsOrGpcSegment() { - super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); initialize(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsOrField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index eea91bcd..b4749be5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; @@ -9,7 +8,7 @@ public final class UsTnCoreSegment extends AbstractBase64Segment { public UsTnCoreSegment() { - super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); initialize(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); initialize(UsTnField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index bde63ca8..26c63cbe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsTnGpcSegment extends AbstractBase64Segment { public UsTnGpcSegment() { - super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); initialize(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsTnField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index de9e7238..93cb427d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; @@ -9,7 +8,7 @@ public final class UsTxCoreSegment extends AbstractBase64Segment { public UsTxCoreSegment() { - super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); initialize(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); initialize(UsTxField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index 1b3c65b6..bdeff998 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsTxGpcSegment extends AbstractBase64Segment { public UsTxGpcSegment() { - super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); initialize(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsTxField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 4dfcff44..7200ca99 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; @@ -9,7 +8,7 @@ public final class UsUtCoreSegment extends AbstractBase64Segment { public UsUtCoreSegment() { - super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); initialize(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); initialize(UsUtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index d3db2a0c..57cc14ab 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; @@ -9,7 +8,7 @@ public final class UsVaCoreSegment extends AbstractBase64Segment { public UsVaCoreSegment() { - super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); initialize(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); initialize(UsVaField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); From e96873e0f47a4ad6a5d220f58417d66ca4c21488 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 17:50:19 -0500 Subject: [PATCH 070/146] more dry --- .../gpp/encoder/field/AbstractEncodable.java | 46 ++++++++++++++ .../AbstractLazilyEncodableSection.java | 39 +----------- .../gpp/encoder/section/EncodableSection.java | 9 +-- .../com/iab/gpp/encoder/section/TcfCaV1.java | 5 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 4 +- .../com/iab/gpp/encoder/section/UsCa.java | 4 +- .../com/iab/gpp/encoder/section/UsCo.java | 4 +- .../com/iab/gpp/encoder/section/UsCt.java | 4 +- .../com/iab/gpp/encoder/section/UsDe.java | 4 +- .../com/iab/gpp/encoder/section/UsIa.java | 4 +- .../com/iab/gpp/encoder/section/UsMt.java | 4 +- .../com/iab/gpp/encoder/section/UsNat.java | 4 +- .../com/iab/gpp/encoder/section/UsNe.java | 4 +- .../com/iab/gpp/encoder/section/UsNh.java | 4 +- .../com/iab/gpp/encoder/section/UsNj.java | 4 +- .../com/iab/gpp/encoder/section/UsOr.java | 4 +- .../com/iab/gpp/encoder/section/UsTn.java | 4 +- .../com/iab/gpp/encoder/section/UsTx.java | 4 +- .../segment/AbstractBase64Segment.java | 4 +- .../AbstractLazilyEncodableSegment.java | 60 +++++++------------ .../gpp/encoder/segment/EncodableSegment.java | 20 +++---- .../gpp/encoder/segment/UspV1CoreSegment.java | 4 +- 22 files changed, 114 insertions(+), 129 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java new file mode 100644 index 00000000..2feadec5 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java @@ -0,0 +1,46 @@ +package com.iab.gpp.encoder.field; + +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +public abstract class AbstractEncodable implements Dirtyable { + + private CharSequence encodedString; + + protected boolean decoded = true; + + + public final String encode() { + return encodeCharSequence().toString(); + } + + protected void ensureDecode() { + if (!this.decoded) { + if(encodedString != null && encodedString.length() > 0) { + this.doDecode(this.encodedString); + } + this.setDirty(false); + this.decoded = true; + } + } + + public final CharSequence encodeCharSequence() { + if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { + this.encodedString = doEncode(); + this.setDirty(false); + this.decoded = true; + } + + return this.encodedString; + } + + protected abstract CharSequence doEncode(); + + protected abstract void doDecode(CharSequence encodedString); + + public final void decode(CharSequence encodedString) { + this.encodedString = encodedString; + this.setDirty(false); + this.decoded = false; + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 3809faa2..ed2bcbab 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -11,15 +11,11 @@ abstract class AbstractLazilyEncodableSection & FieldKey> exte protected final List> segments; - private CharSequence encodedString = null; - - private boolean decoded = true; - protected AbstractLazilyEncodableSection(List> segments) { this.segments = segments; } - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { int numSegments = segments.size(); if (numSegments == 1) { segments.get(0).decode(encodedString); @@ -31,7 +27,7 @@ protected void decodeSection(CharSequence encodedString) { } } - protected CharSequence encodeSection() { + protected CharSequence doEncode() { int numSegments = segments.size(); if (numSegments == 1) { return segments.get(0).encodeCharSequence(); @@ -42,16 +38,6 @@ protected CharSequence encodeSection() { } return SlicedCharSequence.join('.', encodedSegments); } - - private void ensureDecode() { - if (!this.decoded) { - if(encodedString != null && encodedString.length() > 0) { - this.decodeSection(encodedString); - } - this.setDirty(false); - this.decoded = true; - } - } public final boolean hasField(String fieldName) { ensureDecode(); @@ -143,26 +129,6 @@ public void setFieldValue(E fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public final String encode() { - return encodeCharSequence().toString(); - } - - public final CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { - this.encodedString = this.encodeSection(); - this.setDirty(false); - this.decoded = true; - } - - return this.encodedString; - } - - public final void decode(CharSequence encodedString) { - this.encodedString = encodedString; - this.setDirty(false); - this.decoded = false; - } - public final boolean isDirty() { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { @@ -181,6 +147,7 @@ public final void setDirty(boolean dirty) { } public final String toString() { + ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); for (EncodableSegment segment: segments) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index f5661a06..0d8a14a3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,8 +1,10 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; +import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; -public abstract class EncodableSection & FieldKey> { +public abstract class EncodableSection & FieldKey> extends AbstractEncodable implements Dirtyable { public abstract int getId(); @@ -22,9 +24,4 @@ public abstract class EncodableSection & FieldKey> { public abstract void setFieldValue(String fieldName, Object value); - public abstract String encode(); - - public abstract CharSequence encodeCharSequence(); - - public abstract void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index be9c5e98..4b08f0d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -45,7 +45,7 @@ public int getVersion() { } @Override - public void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { @@ -78,7 +78,7 @@ public void decodeSection(CharSequence encodedString) { } @Override - public CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -92,6 +92,7 @@ public CharSequence encodeSection() { @Override public void setFieldValue(TcfCaV1Field fieldName, Object value) throws InvalidFieldException { + // TODO: do this using dirty detection super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index ba70c5c3..aa5440d2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -46,7 +46,7 @@ public int getVersion() { } @Override - public void decodeSection(CharSequence encodedString) { + public void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { @@ -83,7 +83,7 @@ public void decodeSection(CharSequence encodedString) { } @Override - public CharSequence encodeSection() { + public CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 760ef5fc..601aa678 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 387377cb..cfd6c7e2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 6f218dda..4957fefe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 8a9e8972..3a839d9e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 6757ab79..4bf8085d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index ddbb8b8e..89530be5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 3b466f74..3c1e0292 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 5e5b287c..26c9208c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 99f46231..3a706f94 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 67c43218..c530a4f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 0ee0bfd1..c1f1fe66 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 2efd6748..a56a29eb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); if(encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 5c23bef2..4c2b3b0f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 46317017..05af6a33 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -22,7 +22,7 @@ protected AbstractBase64UrlEncoder getBase64UrlEncoder() { } @Override - protected final StringBuilder encodeSegment() { + protected final CharSequence doEncode() { BitStringBuilder bitString = new BitStringBuilder(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { @@ -38,7 +38,7 @@ protected final StringBuilder encodeSegment() { } @Override - protected final void decodeSegment(CharSequence encodedString) { + protected final void doDecode(CharSequence encodedString) { try { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 2b0bc22d..a6fcbddb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -23,6 +23,20 @@ abstract class AbstractLazilyEncodableSegment & FieldKey, T ex protected final FieldNames fieldNames; private final Object[] values; + + public final DataType getField(E fieldName) { + ensureDecode(); + return get(fieldName); + } + + public final E convertKey(String fieldName) { + return fieldNames.convertKey(fieldName); + } + + public final DataType getField(String fieldName) { + return get(fieldNames.convertKey(fieldName)); + } + protected boolean containsKey(E key) { Integer index = fieldNames.getIndex(key); return index != null && values[index] != null; @@ -49,7 +63,7 @@ protected T get(E key) { return null; } - protected boolean isDirty() { + public final boolean isDirty() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { T value = get(i); @@ -60,29 +74,22 @@ protected boolean isDirty() { return false; } - protected void markClean() { + public final void setDirty(boolean dirty) { int size = fieldNames.size(); for (int i = 0; i < size; i++) { T value = get(i); if (value != null) { - value.setDirty(false); + value.setDirty(dirty); } } } - private CharSequence encodedString = null; - - private boolean decoded = true; protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { this.fieldNames = fieldNames; this.values = new Object[fieldNames.size()]; } - protected abstract StringBuilder encodeSegment(); - - protected abstract void decodeSegment(CharSequence encodedString); - public boolean hasField(String fieldName) { E key = fieldNames.convertKey(fieldName); return key != null && hasField(key); @@ -97,11 +104,7 @@ public Object getFieldValue(String fieldName) { } public Object getFieldValue(E fieldName) { - if (!this.decoded) { - this.decodeSegment(this.encodedString); - this.markClean(); - this.decoded = true; - } + ensureDecode(); DataType field = this.get(fieldName); if (field != null) { @@ -111,16 +114,8 @@ public Object getFieldValue(E fieldName) { } } - public void setFieldValue(String fieldName, Object value) { - setFieldValue(fieldNames.convertKey(fieldName), value); - } - public void setFieldValue(E fieldName, Object value) { - if (!this.decoded) { - this.decodeSegment(this.encodedString); - this.markClean(); - this.decoded = true; - } + ensureDecode(); DataType field = this.get(fieldName); if (field != null) { @@ -130,23 +125,8 @@ public void setFieldValue(E fieldName, Object value) { } } - public CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { - this.encodedString = encodeSegment(); - this.markClean(); - this.decoded = true; - } - - return this.encodedString; - } - - public void decode(CharSequence encodedString) { - this.encodedString = encodedString; - this.markClean(); - this.decoded = false; - } - public String toString() { + ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append("{name=").append(getClass().getSimpleName()); int size = fieldNames.size(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 5f05bbf4..6cb4c220 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,22 +1,16 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; +import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; -public abstract class EncodableSegment & FieldKey> { +public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { + public abstract DataType getField(E fieldName); + + public abstract DataType getField(String fieldName); - public abstract boolean hasField(E fieldName); - public abstract Object getFieldValue(E fieldName); public abstract void setFieldValue(E fieldName, Object value); - - public abstract boolean hasField(String fieldName); - - public abstract Object getFieldValue(String fieldName); - - public abstract void setFieldValue(String fieldName, Object value); - - public abstract CharSequence encodeCharSequence(); - - public abstract void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index b66807ba..2b33f181 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -18,7 +18,7 @@ public UspV1CoreSegment() { } @Override - protected StringBuilder encodeSegment() { + protected CharSequence doEncode() { StringBuilder str = new StringBuilder(); str.append(get(UspV1Field.VERSION).getValue()); str.append(get(UspV1Field.NOTICE).getValue()); @@ -28,7 +28,7 @@ protected StringBuilder encodeSegment() { } @Override - protected void decodeSegment(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { if (encodedString == null || encodedString.length() != 4) { throw new DecodingException("Invalid uspv1 string: '" + encodedString + "'"); } From bbaad3c7282ee9bf74cd1d2f06f1ad7ee79e03f0 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 18:09:52 -0500 Subject: [PATCH 071/146] more dry --- .../gpp/encoder/field/AbstractEncodable.java | 1 - .../AbstractLazilyEncodableSection.java | 4 +-- .../com/iab/gpp/encoder/section/TcfCaV1.java | 16 +----------- .../com/iab/gpp/encoder/section/TcfEuV2.java | 15 +---------- .../AbstractLazilyEncodableSegment.java | 26 +------------------ 5 files changed, 5 insertions(+), 57 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java index 2feadec5..d9ae02c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java @@ -39,7 +39,6 @@ public final CharSequence encodeCharSequence() { public final void decode(CharSequence encodedString) { this.encodedString = encodedString; - this.setDirty(false); this.decoded = false; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index ed2bcbab..2de0651e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -113,7 +113,7 @@ public final void setFieldValue(String fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public void setFieldValue(E fieldName, Object value) { + public final void setFieldValue(E fieldName, Object value) { ensureDecode(); int numSegments = segments.size(); @@ -150,7 +150,7 @@ public final String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); - for (EncodableSegment segment: segments) { + for (EncodableSegment segment : segments) { sb.append(", ").append(segment.toString()); } sb.append('}'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 4b08f0d6..b38cda74 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -7,7 +7,6 @@ import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.TcfCaV1CoreSegment; @@ -79,6 +78,7 @@ protected void doDecode(CharSequence encodedString) { @Override protected CharSequence doEncode() { + this.setFieldValue(TcfCaV1Field.LAST_UPDATED, Instant.now()); List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -90,20 +90,6 @@ protected CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } - @Override - public void setFieldValue(TcfCaV1Field fieldName, Object value) throws InvalidFieldException { - // TODO: do this using dirty detection - super.setFieldValue(fieldName, value); - - if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { - Instant utcDateTime = Instant.now(); - - super.setFieldValue(TcfCaV1Field.CREATED, utcDateTime); - super.setFieldValue(TcfCaV1Field.LAST_UPDATED, utcDateTime); - } - } - - public Instant getCreated() { return (Instant) this.getFieldValue(TcfCaV1Field.CREATED); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index aa5440d2..9b78d14a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -7,7 +7,6 @@ import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.TcfEuV2CoreSegment; @@ -84,6 +83,7 @@ public void doDecode(CharSequence encodedString) { @Override public CharSequence doEncode() { + this.setFieldValue(TcfEuV2Field.LAST_UPDATED, Instant.now()); List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -107,19 +107,6 @@ public CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } - @Override - public void setFieldValue(TcfEuV2Field fieldName, Object value) throws InvalidFieldException { - super.setFieldValue(fieldName, value); - - if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { - Instant utcDateTime = Instant.now(); - - super.setFieldValue(TcfEuV2Field.CREATED, utcDateTime); - super.setFieldValue(TcfEuV2Field.LAST_UPDATED, utcDateTime); - } - } - - public Instant getCreated() { return (Instant) this.getFieldValue(TcfEuV2Field.CREATED); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index a6fcbddb..8946ada8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -29,18 +29,9 @@ public final DataType getField(E fieldName) { return get(fieldName); } - public final E convertKey(String fieldName) { - return fieldNames.convertKey(fieldName); - } - public final DataType getField(String fieldName) { return get(fieldNames.convertKey(fieldName)); } - - protected boolean containsKey(E key) { - Integer index = fieldNames.getIndex(key); - return index != null && values[index] != null; - } protected void initialize(E key, T value) { Integer index = fieldNames.getIndex(key); @@ -90,19 +81,6 @@ protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { this.values = new Object[fieldNames.size()]; } - public boolean hasField(String fieldName) { - E key = fieldNames.convertKey(fieldName); - return key != null && hasField(key); - } - - public boolean hasField(E fieldName) { - return this.containsKey(fieldName); - } - - public Object getFieldValue(String fieldName) { - return getFieldValue(fieldNames.convertKey(fieldName)); - } - public Object getFieldValue(E fieldName) { ensureDecode(); @@ -132,9 +110,7 @@ public String toString() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { E field = fieldNames.get(i); - if (hasField(field)) { - sb.append(", ").append(field).append('=').append(getFieldValue(field)); - } + sb.append(", ").append(field).append('=').append(get(field)); } sb.append('}'); return sb.toString(); From 900b5429efae6c472f72cf4f2825a04817a7ef76 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 19:55:16 -0500 Subject: [PATCH 072/146] clean up flows --- .../java/com/iab/gpp/encoder/GppModel.java | 148 +++++++----------- .../gpp/encoder/field/AbstractEncodable.java | 2 +- .../AbstractLazilyEncodableSection.java | 29 +++- .../gpp/encoder/section/EncodableSection.java | 3 +- .../com/iab/gpp/encoder/section/TcfCaV1.java | 11 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 11 +- .../AbstractLazilyEncodableSegment.java | 4 +- .../gpp/encoder/segment/EncodableSegment.java | 5 +- 8 files changed, 103 insertions(+), 110 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 5e3b4bca..55d944f8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.EncodableSection; @@ -35,16 +36,12 @@ import com.iab.gpp.encoder.section.UsVa; import com.iab.gpp.encoder.section.UspV1; -public class GppModel { - private Map> sections = new HashMap<>(); - - private String encodedString; - +public class GppModel extends AbstractEncodable { + private final Map> sections = new HashMap<>(); private boolean dirty = false; - private boolean decoded = true; - public GppModel() { + public GppModel() { } public GppModel(String encodedString) { @@ -123,6 +120,7 @@ private EncodableSection getOrCreateSection(String sectionName) { } if (section != null) { this.sections.put(sectionName, section); + this.dirty = true; } } return section; @@ -133,15 +131,10 @@ public void setFieldValue(String sectionName, FieldKey fieldName, Object value) } public void setFieldValue(String sectionName, String fieldName, Object value) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.setFieldValue(fieldName, value); - this.dirty = true; } else { throw new InvalidFieldException(sectionName + "." + fieldName + " not found"); } @@ -160,11 +153,7 @@ public Object getFieldValue(String sectionName, FieldKey fieldName) { } public Object getFieldValue(String sectionName, String fieldName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.getFieldValue(fieldName); @@ -178,11 +167,7 @@ public boolean hasField(int sectionId, String fieldName) { } public boolean hasField(String sectionName, String fieldName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.hasField(fieldName); @@ -196,22 +181,12 @@ public boolean hasSection(int sectionId) { } public boolean hasSection(String sectionName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } - + ensureDecode(); return this.sections.containsKey(sectionName); } public HeaderV1 getHeader() { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } - + ensureDecode(); HeaderV1 header = new HeaderV1(); try { header.setFieldValue("SectionIds", this.getSectionIds()); @@ -226,11 +201,7 @@ public EncodableSection getSection(int sectionId) { } public EncodableSection getSection(String sectionName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); return this.sections.get(sectionName); } @@ -239,21 +210,16 @@ public void deleteSection(int sectionId) { } public void deleteSection(String sectionName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } if (this.sections.remove(sectionName) != null) { this.dirty = true; } } public void clear() { - this.sections.clear(); - this.encodedString = null; - this.dirty = false; - this.decoded = true; + if (!this.sections.isEmpty()) { + this.sections.clear(); + this.dirty = true; + } } public TcfCaV1 getTcfCaV1Section() { @@ -333,11 +299,7 @@ public UsTn getUsTnSection() { } public List getSectionIds() { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); int length = Sections.SECTION_ORDER.size(); List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { @@ -350,7 +312,8 @@ public List getSectionIds() { return sectionIds; } - protected String encodeModel(Map> sections) { + @Override + protected CharSequence doEncode() { int length = Sections.SECTION_ORDER.size(); List encodedSections = new ArrayList<>(length); List sectionIds = new ArrayList<>(length); @@ -370,12 +333,13 @@ protected String encodeModel(Map> sections) { throw new EncodingException(e); } encodedSections.add(0, header.encodeCharSequence()); - return SlicedCharSequence.join('~', encodedSections).toString(); + return SlicedCharSequence.join('~', encodedSections); } - protected Map> decodeModel(String str) { - if (str == null || str.isEmpty() || str.startsWith("DB")) { - Map> sections = new HashMap<>(); + @Override + protected void doDecode(CharSequence str) { + if (str == null || str.isEmpty() || (str.charAt(0) == 'D' && str.charAt(1) == 'B')) { + sections.clear(); if(str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); @@ -447,11 +411,9 @@ protected Map> decodeModel(String str) { } } } - - return sections; - } else if (str.startsWith("C")) { + } else if (str.charAt(0) == 'C') { // old tcfeu only string - Map> sections = new HashMap<>(); + sections.clear(); TcfEuV2 section = new TcfEuV2(str); sections.put(TcfEuV2.NAME, section); @@ -460,7 +422,6 @@ protected Map> decodeModel(String str) { header.setFieldValue(HeaderV1Field.SECTION_IDS, Arrays.asList(2)); sections.put(HeaderV1.NAME, section); - return sections; } else { throw new DecodingException("Unable to decode '" + str + "'"); } @@ -471,11 +432,7 @@ public String encodeSection(int sectionId) { } public String encodeSection(String sectionName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); EncodableSection section = this.sections.get(sectionName); if (section != null) { return section.encode(); @@ -489,36 +446,15 @@ public void decodeSection(int sectionId, String encodedString) { } public void decodeSection(String sectionName, String encodedString) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } - + ensureDecode(); EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.decode(encodedString); - this.dirty = true; } } - public String encode() { - if (this.encodedString == null || this.encodedString.isEmpty() || this.dirty) { - this.encodedString = encodeModel(this.sections); - this.dirty = false; - this.decoded = true; - } - - return this.encodedString; - } - - public void decode(String encodedString) { - this.encodedString = encodedString; - this.dirty = false; - this.decoded = false; - } - public String toString() { + ensureDecode(); List sectionIds = getSectionIds(); List pieces = new ArrayList<>(sectionIds.size()); for (Integer sectionId : sectionIds) { @@ -527,5 +463,33 @@ public String toString() { return pieces.toString(); } + @Override + public boolean isDirty() { + if (dirty) { + return true; + } + int length = Sections.SECTION_ORDER.size(); + for (int i = 0; i < length; i++) { + String sectionName = Sections.SECTION_ORDER.get(i); + EncodableSection section = this.sections.get(sectionName); + if (section != null && section.isDirty()) { + return true; + } + } + return false; + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + int length = Sections.SECTION_ORDER.size(); + for (int i = 0; i < length; i++) { + String sectionName = Sections.SECTION_ORDER.get(i); + EncodableSection section = this.sections.get(sectionName); + if (section != null) { + section.setDirty(true); + } + } + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java index d9ae02c9..ae1fc6bf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java @@ -6,7 +6,7 @@ public abstract class AbstractEncodable implements Dirtyable { private CharSequence encodedString; - protected boolean decoded = true; + private boolean decoded = true; public final String encode() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 2de0651e..00a28784 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -45,7 +45,8 @@ public final boolean hasField(String fieldName) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if (segment.getField(fieldName) != null) { + E key = segment.resolveKey(fieldName); + if (key != null && segment.getField(key) != null) { return true; } } @@ -73,9 +74,12 @@ public final Object getFieldValue(String fieldName) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - DataType field = segment.getField(fieldName); - if (field != null) { - return field.getValue(); + E key = segment.resolveKey(fieldName); + if (key != null) { + DataType field = segment.getField(key); + if (field != null) { + return field.getValue(); + } } } @@ -103,10 +107,14 @@ public final void setFieldValue(String fieldName, Object value) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - DataType field = segment.getField(fieldName); - if(field != null) { - field.setValue(value); - return; + E key = segment.resolveKey(fieldName); + if (key != null) { + DataType field = segment.getField(key); + if (field != null) { + field.setValue(value); + hook(key); + return; + } } } @@ -122,6 +130,7 @@ public final void setFieldValue(E fieldName, Object value) { DataType field = segment.getField(fieldName); if(field != null) { field.setValue(value); + hook(fieldName); return; } } @@ -129,6 +138,10 @@ public final void setFieldValue(E fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } + protected void hook(E fieldName) { + + } + public final boolean isDirty() { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 0d8a14a3..5dd4c8e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,10 +1,9 @@ package com.iab.gpp.encoder.section; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; -public abstract class EncodableSection & FieldKey> extends AbstractEncodable implements Dirtyable { +public abstract class EncodableSection & FieldKey> extends AbstractEncodable { public abstract int getId(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index b38cda74..3cb96ede 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -78,7 +78,6 @@ protected void doDecode(CharSequence encodedString) { @Override protected CharSequence doEncode() { - this.setFieldValue(TcfCaV1Field.LAST_UPDATED, Instant.now()); List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -90,6 +89,16 @@ protected CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } + @Override + public void hook(TcfCaV1Field fieldName) { + if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { + Instant utcDateTime = Instant.now(); + + this.setFieldValue(TcfCaV1Field.CREATED, utcDateTime); + this.setFieldValue(TcfCaV1Field.LAST_UPDATED, utcDateTime); + } + } + public Instant getCreated() { return (Instant) this.getFieldValue(TcfCaV1Field.CREATED); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 9b78d14a..2235a966 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -83,7 +83,6 @@ public void doDecode(CharSequence encodedString) { @Override public CharSequence doEncode() { - this.setFieldValue(TcfEuV2Field.LAST_UPDATED, Instant.now()); List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -107,6 +106,16 @@ public CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } + @Override + public void hook(TcfEuV2Field fieldName) { + if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { + Instant utcDateTime = Instant.now(); + + this.setFieldValue(TcfEuV2Field.CREATED, utcDateTime); + this.setFieldValue(TcfEuV2Field.LAST_UPDATED, utcDateTime); + } + } + public Instant getCreated() { return (Instant) this.getFieldValue(TcfEuV2Field.CREATED); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 8946ada8..e4743827 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -29,8 +29,8 @@ public final DataType getField(E fieldName) { return get(fieldName); } - public final DataType getField(String fieldName) { - return get(fieldNames.convertKey(fieldName)); + public final E resolveKey(String fieldName) { + return fieldNames.convertKey(fieldName); } protected void initialize(E key, T value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 6cb4c220..9000c946 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { + public abstract E resolveKey(String fieldName); + public abstract DataType getField(E fieldName); - public abstract DataType getField(String fieldName); - public abstract Object getFieldValue(E fieldName); public abstract void setFieldValue(E fieldName, Object value); From 09ef2d93ffc0a4dc53c1d5a9fb96d095fba7969e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 20:25:28 -0500 Subject: [PATCH 073/146] clean up hierarchy --- .../src/main/java/com/iab/gpp/encoder/GppModel.java | 2 +- .../datatype/AbstractEncodableBitStringDataType.java | 2 +- .../main/java/com/iab/gpp/encoder/datatype/DataType.java | 8 ++++---- .../com/iab/gpp/encoder/datatype/EncodableDataType.java | 6 +++--- .../iab/gpp/encoder/datatype/UnencodableCharacter.java | 2 +- .../com/iab/gpp/encoder/datatype/UnencodableInteger.java | 2 +- .../gpp/encoder/{field => section}/AbstractEncodable.java | 2 +- .../com/iab/gpp/encoder/section/EncodableSection.java | 1 - .../com/iab/gpp/encoder/segment/EncodableSegment.java | 2 +- 9 files changed, 13 insertions(+), 14 deletions(-) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/{field => section}/AbstractEncodable.java (96%) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 55d944f8..44c49003 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -9,9 +9,9 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.HeaderV1Field; +import com.iab.gpp.encoder.section.AbstractEncodable; import com.iab.gpp.encoder.section.EncodableSection; import com.iab.gpp.encoder.section.HeaderV1; import com.iab.gpp.encoder.section.Sections; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 76e38bc5..5199842c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -6,7 +6,7 @@ import com.iab.gpp.encoder.error.ValidationException; -public abstract class AbstractEncodableBitStringDataType implements EncodableDataType { +public abstract class AbstractEncodableBitStringDataType extends EncodableDataType { //this if for backwards compatibility with the newer fields protected boolean hardFailIfMissing = true; protected boolean dirty = false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index be85c17b..158ef48b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -2,8 +2,8 @@ import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -public interface DataType extends Dirtyable { - boolean hasValue(); - T getValue(); - void setValue(Object value); +public abstract class DataType implements Dirtyable { + public abstract boolean hasValue(); + public abstract T getValue(); + public abstract void setValue(Object value); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java index bab54fd5..ea214e10 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java @@ -3,8 +3,8 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -public interface EncodableDataType extends DataType { - void encode(BitStringBuilder builder); +public abstract class EncodableDataType extends DataType { + public abstract void encode(BitStringBuilder builder); - void decode(BitStringReader reader); + public abstract void decode(BitStringReader reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 4b1f84ee..8b0739fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -3,7 +3,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.error.ValidationException; -public final class UnencodableCharacter implements DataType { +public final class UnencodableCharacter extends DataType { private boolean dirty = false; private Predicate validator; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index 1b40a247..8ffc7e02 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -3,7 +3,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.error.ValidationException; -public final class UnencodableInteger implements DataType { +public final class UnencodableInteger extends DataType { private boolean dirty; private Predicate validator; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java similarity index 96% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index ae1fc6bf..0fb5d465 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -1,4 +1,4 @@ -package com.iab.gpp.encoder.field; +package com.iab.gpp.encoder.section; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 5dd4c8e8..5572f625 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; public abstract class EncodableSection & FieldKey> extends AbstractEncodable { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 9000c946..ecd8327c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.section.AbstractEncodable; public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { public abstract E resolveKey(String fieldName); From b9817bb48b22cb2e6ffd6b54fcb8d54b809d9716 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 20:43:38 -0500 Subject: [PATCH 074/146] style --- .../com/iab/gpp/encoder/field/FieldNames.java | 5 +- .../encoder/section/AbstractEncodable.java | 46 ++++++++++--------- .../AbstractLazilyEncodableSection.java | 25 +++++++--- .../com/iab/gpp/encoder/section/TcfCaV1.java | 2 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 2 +- .../AbstractLazilyEncodableSegment.java | 30 +++++++----- .../encoder/segment/TcfEuV2CoreSegment.java | 2 +- 7 files changed, 66 insertions(+), 46 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 960d1829..65fd99d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -34,8 +34,9 @@ public Integer getIndex(E key) { } return indices[key.ordinal()]; } - - public E convertKey(String key) { + + public E resolveKey(String key) { return map.get(key); } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index 0fb5d465..7fc75676 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -4,42 +4,44 @@ public abstract class AbstractEncodable implements Dirtyable { - private CharSequence encodedString; + private CharSequence encoded; private boolean decoded = true; - - - public final String encode() { - return encodeCharSequence().toString(); + + private final boolean isEmpty() { + return encoded == null || encoded.length() == 0; } - - protected void ensureDecode() { + + protected final void ensureDecode() { if (!this.decoded) { - if(encodedString != null && encodedString.length() > 0) { - this.doDecode(this.encodedString); + if (!isEmpty()) { + this.doDecode(this.encoded); } this.setDirty(false); this.decoded = true; } } - - public final CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { - this.encodedString = doEncode(); - this.setDirty(false); - this.decoded = true; - } - return this.encodedString; + public final void decode(CharSequence encodedString) { + this.encoded = encodedString; + this.decoded = false; } - protected abstract CharSequence doEncode(); - protected abstract void doDecode(CharSequence encodedString); - public final void decode(CharSequence encodedString) { - this.encodedString = encodedString; - this.decoded = false; + protected abstract CharSequence doEncode(); + + public final String encode() { + return encodeCharSequence().toString(); + } + + public final CharSequence encodeCharSequence() { + if (isEmpty() || this.isDirty()) { + this.encoded = doEncode(); + this.setDirty(false); + this.decoded = true; + } + return this.encoded; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 00a28784..a6c574cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -15,6 +15,7 @@ protected AbstractLazilyEncodableSection(List> segments) { this.segments = segments; } + @Override protected void doDecode(CharSequence encodedString) { int numSegments = segments.size(); if (numSegments == 1) { @@ -27,6 +28,7 @@ protected void doDecode(CharSequence encodedString) { } } + @Override protected CharSequence doEncode() { int numSegments = segments.size(); if (numSegments == 1) { @@ -39,6 +41,7 @@ protected CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } + @Override public final boolean hasField(String fieldName) { ensureDecode(); @@ -53,7 +56,8 @@ public final boolean hasField(String fieldName) { return false; } - + + @Override public final boolean hasField(E fieldName) { ensureDecode(); @@ -68,6 +72,7 @@ public final boolean hasField(E fieldName) { return false; } + @Override public final Object getFieldValue(String fieldName) { ensureDecode(); @@ -85,7 +90,8 @@ public final Object getFieldValue(String fieldName) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - + + @Override public final Object getFieldValue(E fieldName) { ensureDecode(); @@ -101,6 +107,7 @@ public final Object getFieldValue(E fieldName) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } + @Override public final void setFieldValue(String fieldName, Object value) { ensureDecode(); @@ -112,7 +119,7 @@ public final void setFieldValue(String fieldName, Object value) { DataType field = segment.getField(key); if (field != null) { field.setValue(value); - hook(key); + onSet(key); return; } } @@ -120,7 +127,8 @@ public final void setFieldValue(String fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - + + @Override public final void setFieldValue(E fieldName, Object value) { ensureDecode(); @@ -130,7 +138,7 @@ public final void setFieldValue(E fieldName, Object value) { DataType field = segment.getField(fieldName); if(field != null) { field.setValue(value); - hook(fieldName); + onSet(fieldName); return; } } @@ -138,10 +146,11 @@ public final void setFieldValue(E fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - protected void hook(E fieldName) { - + protected void onSet(E fieldName) { + // pass: override this to set last modified fields } + @Override public final boolean isDirty() { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { @@ -152,6 +161,7 @@ public final boolean isDirty() { return false; } + @Override public final void setDirty(boolean dirty) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { @@ -159,6 +169,7 @@ public final void setDirty(boolean dirty) { } } + @Override public final String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 3cb96ede..7ecbeb75 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -90,7 +90,7 @@ protected CharSequence doEncode() { } @Override - public void hook(TcfCaV1Field fieldName) { + public void onSet(TcfCaV1Field fieldName) { if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { Instant utcDateTime = Instant.now(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 2235a966..81690838 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -107,7 +107,7 @@ public CharSequence doEncode() { } @Override - public void hook(TcfEuV2Field fieldName) { + public void onSet(TcfEuV2Field fieldName) { if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { Instant utcDateTime = Instant.now(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index e4743827..2b1c6ea4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -23,17 +23,24 @@ abstract class AbstractLazilyEncodableSegment & FieldKey, T ex protected final FieldNames fieldNames; private final Object[] values; - + protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { + this.fieldNames = fieldNames; + this.values = new Object[fieldNames.size()]; + } + + + @Override public final DataType getField(E fieldName) { ensureDecode(); return get(fieldName); } - + + @Override public final E resolveKey(String fieldName) { - return fieldNames.convertKey(fieldName); + return fieldNames.resolveKey(fieldName); } - protected void initialize(E key, T value) { + protected final void initialize(E key, T value) { Integer index = fieldNames.getIndex(key); if (index == null) { throw new IllegalArgumentException("invalid key "+ key); @@ -42,11 +49,11 @@ protected void initialize(E key, T value) { } @SuppressWarnings("unchecked") - protected T get(int index) { + protected final T get(int index) { return (T) values[index]; } - protected T get(E key) { + protected final T get(E key) { Integer index = fieldNames.getIndex(key); if (index != null) { return get(index); @@ -54,6 +61,7 @@ protected T get(E key) { return null; } + @Override public final boolean isDirty() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { @@ -65,6 +73,7 @@ public final boolean isDirty() { return false; } + @Override public final void setDirty(boolean dirty) { int size = fieldNames.size(); for (int i = 0; i < size; i++) { @@ -75,12 +84,7 @@ public final void setDirty(boolean dirty) { } } - - protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { - this.fieldNames = fieldNames; - this.values = new Object[fieldNames.size()]; - } - + @Override public Object getFieldValue(E fieldName) { ensureDecode(); @@ -92,6 +96,7 @@ public Object getFieldValue(E fieldName) { } } + @Override public void setFieldValue(E fieldName, Object value) { ensureDecode(); @@ -103,6 +108,7 @@ public void setFieldValue(E fieldName, Object value) { } } + @Override public String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 65e77b56..4c63d7c8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -17,7 +17,7 @@ public final class TcfEuV2CoreSegment extends AbstractBase64Segment Date: Thu, 22 Jan 2026 20:48:14 -0500 Subject: [PATCH 075/146] remove extra class --- .../AbstractLazilyEncodableSection.java | 183 ------------------ .../gpp/encoder/section/EncodableSection.java | 173 ++++++++++++++++- .../com/iab/gpp/encoder/section/HeaderV1.java | 2 +- .../com/iab/gpp/encoder/section/TcfCaV1.java | 2 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 2 +- .../com/iab/gpp/encoder/section/UsCa.java | 2 +- .../com/iab/gpp/encoder/section/UsCo.java | 2 +- .../com/iab/gpp/encoder/section/UsCt.java | 2 +- .../com/iab/gpp/encoder/section/UsDe.java | 2 +- .../com/iab/gpp/encoder/section/UsFl.java | 2 +- .../com/iab/gpp/encoder/section/UsIa.java | 2 +- .../com/iab/gpp/encoder/section/UsMt.java | 2 +- .../com/iab/gpp/encoder/section/UsNat.java | 2 +- .../com/iab/gpp/encoder/section/UsNe.java | 2 +- .../com/iab/gpp/encoder/section/UsNh.java | 2 +- .../com/iab/gpp/encoder/section/UsNj.java | 2 +- .../com/iab/gpp/encoder/section/UsOr.java | 2 +- .../com/iab/gpp/encoder/section/UsTn.java | 2 +- .../com/iab/gpp/encoder/section/UsTx.java | 2 +- .../com/iab/gpp/encoder/section/UsUt.java | 2 +- .../com/iab/gpp/encoder/section/UsVa.java | 2 +- .../com/iab/gpp/encoder/section/UspV1.java | 2 +- 22 files changed, 186 insertions(+), 210 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java deleted file mode 100644 index a6c574cb..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.iab.gpp.encoder.section; - -import java.util.ArrayList; -import java.util.List; -import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.segment.EncodableSegment; - -abstract class AbstractLazilyEncodableSection & FieldKey> extends EncodableSection { - - protected final List> segments; - - protected AbstractLazilyEncodableSection(List> segments) { - this.segments = segments; - } - - @Override - protected void doDecode(CharSequence encodedString) { - int numSegments = segments.size(); - if (numSegments == 1) { - segments.get(0).decode(encodedString); - return; - } - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < numSegments; i++) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - - @Override - protected CharSequence doEncode() { - int numSegments = segments.size(); - if (numSegments == 1) { - return segments.get(0).encodeCharSequence(); - } - List encodedSegments = new ArrayList<>(numSegments); - for (int i = 0; i < numSegments; i++) { - encodedSegments.add(segments.get(i).encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - @Override - public final boolean hasField(String fieldName) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - E key = segment.resolveKey(fieldName); - if (key != null && segment.getField(key) != null) { - return true; - } - } - - return false; - } - - @Override - public final boolean hasField(E fieldName) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - if (segment.getField(fieldName) != null) { - return true; - } - } - - return false; - } - - @Override - public final Object getFieldValue(String fieldName) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - E key = segment.resolveKey(fieldName); - if (key != null) { - DataType field = segment.getField(key); - if (field != null) { - return field.getValue(); - } - } - } - - throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); - } - - @Override - public final Object getFieldValue(E fieldName) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - DataType field = segment.getField(fieldName); - if (field != null) { - return field.getValue(); - } - } - - throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); - } - - @Override - public final void setFieldValue(String fieldName, Object value) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - E key = segment.resolveKey(fieldName); - if (key != null) { - DataType field = segment.getField(key); - if (field != null) { - field.setValue(value); - onSet(key); - return; - } - } - } - - throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); - } - - @Override - public final void setFieldValue(E fieldName, Object value) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - DataType field = segment.getField(fieldName); - if(field != null) { - field.setValue(value); - onSet(fieldName); - return; - } - } - - throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); - } - - protected void onSet(E fieldName) { - // pass: override this to set last modified fields - } - - @Override - public final boolean isDirty() { - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - if (segments.get(i).isDirty()) { - return true; - } - } - return false; - } - - @Override - public final void setDirty(boolean dirty) { - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - segments.get(i).setDirty(dirty); - } - } - - @Override - public final String toString() { - ensureDecode(); - StringBuilder sb = new StringBuilder(); - sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); - for (EncodableSegment segment : segments) { - sb.append(", ").append(segment.toString()); - } - sb.append('}'); - return sb.toString(); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 5572f625..f13b1c44 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,25 +1,184 @@ package com.iab.gpp.encoder.section; +import java.util.ArrayList; +import java.util.List; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class EncodableSection & FieldKey> extends AbstractEncodable { + protected final List> segments; + + protected EncodableSection(List> segments) { + this.segments = segments; + } + public abstract int getId(); public abstract String getName(); public abstract int getVersion(); - public abstract boolean hasField(E fieldName); + @Override + protected void doDecode(CharSequence encodedString) { + int numSegments = segments.size(); + if (numSegments == 1) { + segments.get(0).decode(encodedString); + return; + } + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < numSegments; i++) { + segments.get(i).decode(encodedSegments.get(i)); + } + } + + @Override + protected CharSequence doEncode() { + int numSegments = segments.size(); + if (numSegments == 1) { + return segments.get(0).encodeCharSequence(); + } + List encodedSegments = new ArrayList<>(numSegments); + for (int i = 0; i < numSegments; i++) { + encodedSegments.add(segments.get(i).encodeCharSequence()); + } + return SlicedCharSequence.join('.', encodedSegments); + } + + public final boolean hasField(String fieldName) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + E key = segment.resolveKey(fieldName); + if (key != null && segment.getField(key) != null) { + return true; + } + } + + return false; + } + + public final boolean hasField(E fieldName) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + if (segment.getField(fieldName) != null) { + return true; + } + } + + return false; + } + + public final Object getFieldValue(String fieldName) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + E key = segment.resolveKey(fieldName); + if (key != null) { + DataType field = segment.getField(key); + if (field != null) { + return field.getValue(); + } + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public final Object getFieldValue(E fieldName) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + DataType field = segment.getField(fieldName); + if (field != null) { + return field.getValue(); + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public final void setFieldValue(String fieldName, Object value) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + E key = segment.resolveKey(fieldName); + if (key != null) { + DataType field = segment.getField(key); + if (field != null) { + field.setValue(value); + onSet(key); + return; + } + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public final void setFieldValue(E fieldName, Object value) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + DataType field = segment.getField(fieldName); + if(field != null) { + field.setValue(value); + onSet(fieldName); + return; + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } - public abstract Object getFieldValue(E fieldName); + protected void onSet(E fieldName) { + // pass: override this to set last modified fields + } - public abstract void setFieldValue(E fieldName, Object value); - - public abstract boolean hasField(String fieldName); + @Override + public final boolean isDirty() { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + if (segments.get(i).isDirty()) { + return true; + } + } + return false; + } - public abstract Object getFieldValue(String fieldName); + @Override + public final void setDirty(boolean dirty) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + segments.get(i).setDirty(dirty); + } + } - public abstract void setFieldValue(String fieldName, Object value); + @Override + public final String toString() { + ensureDecode(); + StringBuilder sb = new StringBuilder(); + sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); + for (EncodableSegment segment : segments) { + sb.append(", ").append(segment.toString()); + } + sb.append('}'); + return sb.toString(); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 4d3742b4..6bcd8d55 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; -public class HeaderV1 extends AbstractLazilyEncodableSection { +public class HeaderV1 extends EncodableSection { public static final int ID = 3; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 7ecbeb75..bb461535 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.segment.TcfCaV1DisclosedVendorsSegment; import com.iab.gpp.encoder.segment.TcfCaV1PublisherPurposesSegment; -public class TcfCaV1 extends AbstractLazilyEncodableSection { +public class TcfCaV1 extends EncodableSection { public static final int ID = 5; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 81690838..d953f315 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -14,7 +14,7 @@ import com.iab.gpp.encoder.segment.TcfEuV2VendorsAllowedSegment; import com.iab.gpp.encoder.segment.TcfEuV2VendorsDisclosedSegment; -public class TcfEuV2 extends AbstractLazilyEncodableSection { +public class TcfEuV2 extends EncodableSection { public static final int ID = 2; public static final int VERSION = 2; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 601aa678..d5ab9d13 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCaCoreSegment; import com.iab.gpp.encoder.segment.UsCaGpcSegment; -public class UsCa extends AbstractLazilyEncodableSection { +public class UsCa extends EncodableSection { public static final int ID = 8; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index cfd6c7e2..89b8f8e2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCoCoreSegment; import com.iab.gpp.encoder.segment.UsCoGpcSegment; -public class UsCo extends AbstractLazilyEncodableSection { +public class UsCo extends EncodableSection { public static final int ID = 10; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 4957fefe..96a59d57 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCtCoreSegment; import com.iab.gpp.encoder.segment.UsCtGpcSegment; -public class UsCt extends AbstractLazilyEncodableSection { +public class UsCt extends EncodableSection { public static final int ID = 12; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 3a839d9e..5e72b828 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsDeCoreSegment; import com.iab.gpp.encoder.segment.UsDeGpcSegment; -public class UsDe extends AbstractLazilyEncodableSection { +public class UsDe extends EncodableSection { public static final int ID = 17; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 42b8922b..fc444871 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.segment.UsFlCoreSegment; -public class UsFl extends AbstractLazilyEncodableSection { +public class UsFl extends EncodableSection { public static final int ID = 13; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 4bf8085d..87e7a493 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsIaCoreSegment; import com.iab.gpp.encoder.segment.UsIaGpcSegment; -public class UsIa extends AbstractLazilyEncodableSection { +public class UsIa extends EncodableSection { public static final int ID = 18; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 89530be5..56ee980d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsMtCoreSegment; import com.iab.gpp.encoder.segment.UsMtGpcSegment; -public class UsMt extends AbstractLazilyEncodableSection { +public class UsMt extends EncodableSection { public static final int ID = 14; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 3c1e0292..44e85cc7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNatCoreSegment; import com.iab.gpp.encoder.segment.UsNatGpcSegment; -public class UsNat extends AbstractLazilyEncodableSection { +public class UsNat extends EncodableSection { public static final int ID = 7; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 26c9208c..54fb595f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNeCoreSegment; import com.iab.gpp.encoder.segment.UsNeGpcSegment; -public class UsNe extends AbstractLazilyEncodableSection { +public class UsNe extends EncodableSection { public static final int ID = 19; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 3a706f94..4c29c10e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNhCoreSegment; import com.iab.gpp.encoder.segment.UsNhGpcSegment; -public class UsNh extends AbstractLazilyEncodableSection { +public class UsNh extends EncodableSection { public static final int ID = 20; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index c530a4f0..a0731775 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNjCoreSegment; import com.iab.gpp.encoder.segment.UsNjGpcSegment; -public class UsNj extends AbstractLazilyEncodableSection { +public class UsNj extends EncodableSection { public static final int ID = 21; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index c1f1fe66..edb73dbe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsOrCoreSegment; import com.iab.gpp.encoder.segment.UsOrGpcSegment; -public class UsOr extends AbstractLazilyEncodableSection { +public class UsOr extends EncodableSection { public static final int ID = 15; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index a56a29eb..32cd04fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsTnCoreSegment; import com.iab.gpp.encoder.segment.UsTnGpcSegment; -public class UsTn extends AbstractLazilyEncodableSection { +public class UsTn extends EncodableSection { public static final int ID = 22; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 4c2b3b0f..56ad82ad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsTxCoreSegment; import com.iab.gpp.encoder.segment.UsTxGpcSegment; -public class UsTx extends AbstractLazilyEncodableSection { +public class UsTx extends EncodableSection { public static final int ID = 16; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 52530473..9cd0fce8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.segment.UsUtCoreSegment; -public class UsUt extends AbstractLazilyEncodableSection { +public class UsUt extends EncodableSection { public static final int ID = 11; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 33b267ba..05fc17e2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.segment.UsVaCoreSegment; -public class UsVa extends AbstractLazilyEncodableSection { +public class UsVa extends EncodableSection { public static final int ID = 9; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index fff8469c..e8f231be 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -4,7 +4,7 @@ import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.segment.UspV1CoreSegment; -public class UspV1 extends AbstractLazilyEncodableSection { +public class UspV1 extends EncodableSection { public static final int ID = 6; public static final int VERSION = 1; From 70c65efa2445812acd247410c110f71fc19185f8 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 21:11:26 -0500 Subject: [PATCH 076/146] use fieldkey --- .../java/com/iab/gpp/encoder/GppModel.java | 24 +- .../com/iab/gpp/encoder/field/FieldNames.java | 6 +- .../gpp/encoder/section/EncodableSection.java | 6 +- .../AbstractLazilyEncodableSegment.java | 2 +- .../gpp/encoder/segment/EncodableSegment.java | 2 +- .../encoder/segment/TcfCaV1CoreSegment.java | 2 +- .../com/iab/gpp/encoder/GppModelTest.java | 44 ++-- .../iab/gpp/encoder/section/HeaderV1Test.java | 25 +- .../iab/gpp/encoder/section/TcfEuV2Test.java | 230 +++++++++--------- .../iab/gpp/encoder/section/UspV1Test.java | 47 ++-- 10 files changed, 190 insertions(+), 198 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 44c49003..219a82d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -49,10 +49,6 @@ public GppModel(String encodedString) { } public void setFieldValue(int sectionId, FieldKey fieldName, Object value) { - setFieldValue(sectionId, fieldName.getName(), value); - } - - public void setFieldValue(int sectionId, String fieldName, Object value) { setFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName, value); } @@ -127,10 +123,6 @@ private EncodableSection getOrCreateSection(String sectionName) { } public void setFieldValue(String sectionName, FieldKey fieldName, Object value) { - setFieldValue(sectionName, fieldName.getName(), value); - } - - public void setFieldValue(String sectionName, String fieldName, Object value) { ensureDecode(); EncodableSection section = getOrCreateSection(sectionName); if (section != null) { @@ -141,18 +133,10 @@ public void setFieldValue(String sectionName, String fieldName, Object value) { } public Object getFieldValue(int sectionId, FieldKey fieldName) { - return getFieldValue(sectionId, fieldName.getName()); - } - - public Object getFieldValue(int sectionId, String fieldName) { return getFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); } public Object getFieldValue(String sectionName, FieldKey fieldName) { - return getFieldValue(sectionName, fieldName.getName()); - } - - public Object getFieldValue(String sectionName, String fieldName) { ensureDecode(); EncodableSection field = this.sections.get(sectionName); if (field != null) { @@ -162,11 +146,11 @@ public Object getFieldValue(String sectionName, String fieldName) { } } - public boolean hasField(int sectionId, String fieldName) { + public boolean hasField(int sectionId, FieldKey fieldName) { return hasField(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); } - public boolean hasField(String sectionName, String fieldName) { + public boolean hasField(String sectionName, FieldKey fieldName) { ensureDecode(); EncodableSection field = this.sections.get(sectionName); if (field != null) { @@ -189,7 +173,7 @@ public HeaderV1 getHeader() { ensureDecode(); HeaderV1 header = new HeaderV1(); try { - header.setFieldValue("SectionIds", this.getSectionIds()); + header.setFieldValue(HeaderV1Field.SECTION_IDS, this.getSectionIds()); } catch (InvalidFieldException e) { } @@ -328,7 +312,7 @@ protected CharSequence doEncode() { HeaderV1 header = new HeaderV1(); try { - header.setFieldValue("SectionIds", getSectionIds()); + header.setFieldValue(HeaderV1Field.SECTION_IDS, getSectionIds()); } catch (InvalidFieldException e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 65fd99d1..69822878 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -5,7 +5,7 @@ public final class FieldNames & FieldKey> { private final E[] keys; - private final LinkedHashMap map; + private final LinkedHashMap map; private final Integer[] indices; @SafeVarargs @@ -15,7 +15,7 @@ public final class FieldNames & FieldKey> { this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; for (int i = 0; i < keys.length; i++) { E key = keys[i]; - this.map.put(key.getName(), key); + this.map.put(key, key); this.indices[key.ordinal()] = i; } } @@ -35,7 +35,7 @@ public Integer getIndex(E key) { return indices[key.ordinal()]; } - public E resolveKey(String key) { + public E resolveKey(FieldKey key) { return map.get(key); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index f13b1c44..72d3bf4a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -47,7 +47,7 @@ protected CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } - public final boolean hasField(String fieldName) { + public final boolean hasField(FieldKey fieldName) { ensureDecode(); int numSegments = segments.size(); @@ -76,7 +76,7 @@ public final boolean hasField(E fieldName) { return false; } - public final Object getFieldValue(String fieldName) { + public final Object getFieldValue(FieldKey fieldName) { ensureDecode(); int numSegments = segments.size(); @@ -109,7 +109,7 @@ public final Object getFieldValue(E fieldName) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public final void setFieldValue(String fieldName, Object value) { + public final void setFieldValue(FieldKey fieldName, Object value) { ensureDecode(); int numSegments = segments.size(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 2b1c6ea4..439326ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -36,7 +36,7 @@ public final DataType getField(E fieldName) { } @Override - public final E resolveKey(String fieldName) { + public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index ecd8327c..00bfdfdd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.section.AbstractEncodable; public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { - public abstract E resolveKey(String fieldName); + public abstract E resolveKey(FieldKey fieldName); public abstract DataType getField(E fieldName); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index fb0151f9..6be9b664 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -15,7 +15,7 @@ public final class TcfCaV1CoreSegment extends AbstractBase64Segment()); + headerV1.setFieldValue(HeaderV1Field.SECTION_IDS, new ArrayList<>()); Assertions.assertEquals("DBAA", headerV1.encode()); } @Test public void testEncode2() { HeaderV1 headerV1 = new HeaderV1(); - headerV1.setFieldValue("SectionIds", Arrays.asList(2)); + headerV1.setFieldValue(HeaderV1Field.SECTION_IDS, Arrays.asList(2)); Assertions.assertEquals("DBABMA", headerV1.encode()); } @Test public void testEncode3() { HeaderV1 headerV1 = new HeaderV1(); - headerV1.setFieldValue("SectionIds", Arrays.asList(2, 6)); + headerV1.setFieldValue(HeaderV1Field.SECTION_IDS, Arrays.asList(2, 6)); Assertions.assertEquals("DBACNYA", headerV1.encode()); } @@ -34,27 +35,27 @@ public void testEncode3() { public void testDecode1() { HeaderV1 headerV1 = new HeaderV1(); headerV1.decode("DBAA"); - Assertions.assertEquals(Set.of(), headerV1.getFieldValue("SectionIds")); - Assertions.assertEquals(headerV1.getFieldValue("Version"), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue("SectionIds"), headerV1.getSectionsIds()); + Assertions.assertEquals(Set.of(), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test public void testDecode2() { HeaderV1 headerV1 = new HeaderV1(); headerV1.decode("DBABMA"); - Assertions.assertEquals(Set.of(2), headerV1.getFieldValue("SectionIds")); - Assertions.assertEquals(headerV1.getFieldValue("Version"), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue("SectionIds"), headerV1.getSectionsIds()); + Assertions.assertEquals(Set.of(2), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test public void testDecode3() { HeaderV1 headerV1 = new HeaderV1(); headerV1.decode("DBACNYA"); - Assertions.assertEquals(Set.of(2, 6), headerV1.getFieldValue("SectionIds")); - Assertions.assertEquals(headerV1.getFieldValue("Version"), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue("SectionIds"), headerV1.getSectionsIds()); + Assertions.assertEquals(Set.of(2, 6), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test() diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 94bf7ba3..dda55beb 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -148,22 +148,22 @@ public void testDecode3() { "CPcqBNJPcqBNJNwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.QGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g.IGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals(880, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(0, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(0, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(48, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("AA", tcfEuV2.getFieldValue("PublisherCountryCode")); - - Assertions.assertEquals(3, tcfEuV2.getFieldValue("PublisherPurposesSegmentType")); - - Assertions.assertEquals(2, tcfEuV2.getFieldValue("VendorsAllowedSegmentType")); - List vendorsAllowed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue("VendorsAllowed")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals(880, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(48, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("AA", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + + Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE)); + + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE)); + List vendorsAllowed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED)); Assertions.assertEquals(434, vendorsAllowed.size()); Assertions.assertEquals(1, vendorsAllowed.get(0)); Assertions.assertEquals(2, vendorsAllowed.get(1)); @@ -185,8 +185,8 @@ public void testDecode3() { Assertions.assertEquals(790, vendorsAllowed.get(vendorsAllowed.size() - 2)); Assertions.assertEquals(791, vendorsAllowed.get(vendorsAllowed.size() - 1)); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("VendorsDisclosedSegmentType")); - List vendorsDisclosed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue("VendorsDisclosed")); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE)); + List vendorsDisclosed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED)); Assertions.assertEquals(434, vendorsDisclosed.size()); Assertions.assertEquals(1, vendorsDisclosed.get(0)); Assertions.assertEquals(2, vendorsDisclosed.get(1)); @@ -208,40 +208,40 @@ public void testDecode3() { Assertions.assertEquals(790, vendorsDisclosed.get(vendorsDisclosed.size() - 2)); Assertions.assertEquals(791, vendorsDisclosed.get(vendorsDisclosed.size() - 1)); - Assertions.assertEquals(tcfEuV2.getFieldValue("Version"), tcfEuV2.getVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue("Created"), tcfEuV2.getCreated()); - Assertions.assertEquals(tcfEuV2.getFieldValue("LastUpdated"), tcfEuV2.getLastUpdated()); - Assertions.assertEquals(tcfEuV2.getFieldValue("CmpId"), tcfEuV2.getCmpId()); - Assertions.assertEquals(tcfEuV2.getFieldValue("CmpVersion"), tcfEuV2.getCmpVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue("ConsentScreen"), tcfEuV2.getConsentScreen()); - Assertions.assertEquals(tcfEuV2.getFieldValue("ConsentLanguage"), tcfEuV2.getConsentLanguage()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorListVersion"), tcfEuV2.getVendorListVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PolicyVersion"), tcfEuV2.getPolicyVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue("IsServiceSpecific"), tcfEuV2.getIsServiceSpecific()); - Assertions.assertEquals(tcfEuV2.getFieldValue("UseNonStandardStacks"), tcfEuV2.getUseNonStandardStacks()); - Assertions.assertEquals(tcfEuV2.getFieldValue("SpecialFeatureOptins"), tcfEuV2.getSpecialFeatureOptins()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PurposeConsents"), tcfEuV2.getPurposeConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PurposeLegitimateInterests"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VERSION), tcfEuV2.getVersion()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CREATED), tcfEuV2.getCreated()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED), tcfEuV2.getLastUpdated()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID), tcfEuV2.getCmpId()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION), tcfEuV2.getCmpVersion()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN), tcfEuV2.getConsentScreen()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE), tcfEuV2.getConsentLanguage()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION), tcfEuV2.getVendorListVersion()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION), tcfEuV2.getPolicyVersion()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC), tcfEuV2.getIsServiceSpecific()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS), tcfEuV2.getUseNonStandardStacks()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS), tcfEuV2.getSpecialFeatureOptins()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS), tcfEuV2.getPurposeConsents()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS), tcfEuV2.getPurposeLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PurposeOneTreatment"), tcfEuV2.getPurposeOneTreatment()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherCountryCode"), tcfEuV2.getPublisherCountryCode()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorConsents"), tcfEuV2.getVendorConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorLegitimateInterests"), tcfEuV2.getVendorLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherRestrictions"), tcfEuV2.getPublisherRestrictions()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherPurposesSegmentType"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT), tcfEuV2.getPurposeOneTreatment()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE), tcfEuV2.getPublisherCountryCode()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS), tcfEuV2.getVendorConsents()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS), tcfEuV2.getVendorLegitimateInterests()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS), tcfEuV2.getPublisherRestrictions()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE), tcfEuV2.getPublisherPurposesSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherConsents"), tcfEuV2.getPublisherConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherLegitimateInterests"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS), tcfEuV2.getPublisherConsents()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS), tcfEuV2.getPublisherLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue("NumCustomPurposes"), tcfEuV2.getNumCustomPurposes()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherCustomConsents"), tcfEuV2.getPublisherCustomConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherCustomLegitimateInterests"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES), tcfEuV2.getNumCustomPurposes()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS), tcfEuV2.getPublisherCustomConsents()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS), tcfEuV2.getPublisherCustomLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorsAllowedSegmentType"), tcfEuV2.getVendorsAllowedSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorsAllowed"), tcfEuV2.getVendorsAllowed()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorsDisclosedSegmentType"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE), tcfEuV2.getVendorsAllowedSegmentType()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED), tcfEuV2.getVendorsAllowed()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE), tcfEuV2.getVendorsDisclosedSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorsDisclosed"), tcfEuV2.getVendorsDisclosed()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED), tcfEuV2.getVendorsDisclosed()); } @Test @@ -249,33 +249,33 @@ public void testDecode4() { TcfEuV2 tcfEuV2 = new TcfEuV2( "CPi8wgAPi8wgAAOACBENCuCoAP_AAEfAACiQJHNd_H__bX9n-f7_6ft0eY1f9_r37uQzDhfNk-8F3L_W_LwX_2E7NF36tq4KmR4ku1LBIUNtHMnUDUmxaokVrzHsak2cpzNKJ_BkknsZe2dYGF9vm5tj-QKZ7_5_d3f52T_9_9v-39z33913v3d93-_13LjdV5_9H_v9fR_b8_Kf9_5-_4v8_____3_e______8AEEggCTDVuIAuxLHAm0DCKBECMKwkKoFABBQDC0QGADg4KdlYBPrCBAAgFAEYEQIcAUYEAgAAAgCQiACQIsEAAAIgEAAIAEQiEABAwCCgAsDAIAAQDQMUQoABAkIMiAiKUwICIEggJbKhBKC6Q0wgCrLACgkRsFAAiAAAUgACAsHAMESAlYsECTFG-QAjBCgFEqFaAGGgAwABBI4RABgACCRwqADAAEEjgA"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals(14, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(174, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(true, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(174, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); Assertions.assertEquals( Set.of(1), - tcfEuV2.getFieldValue("SpecialFeatureOptins")); + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions .assertEquals( Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeConsents")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("US", tcfEuV2.getFieldValue("PublisherCountryCode")); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(772, ((IntegerSet) tcfEuV2.getFieldValue("VendorConsents")).size()); + Assertions.assertEquals(772, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); - Assertions.assertEquals(280, ((IntegerSet) tcfEuV2.getFieldValue("VendorLegitimateInterests")).size()); + Assertions.assertEquals(280, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); } @Test @@ -283,67 +283,67 @@ public void testDecode5() { TcfEuV2 tcfEuV2 = new TcfEuV2( "CPgA5EAPgA5EAAOACBENCuCoAP_AAEfAACiQI0Nd_H__bX9n-f7_6Pt0cY1f9_r3ruQzDhfFk-8F3L_W3LwX32E7NF36pq4KmR4ku1LBIQFtHMnUDUmxaokVrzHsak2cpyNKI7BkknsZe2dYGF9Pm5lD-QKZ7_5_d3f52T_9_9v-39z339V3v3d93-_12PjdV599H_v9fR_b8_Kf9_5-_4v8___4IQAAAAQQ_AJMNW4gC7EscCbQMIoAQIwrCQqAUAEFAMLRAYAODgpmVgEusIEACAUARgRAhxBRgQCAAACAJCIAJAiwQAIAiAQAAgARAIQAEDAIKACwMAgABANAxACgAECQgyICIpTAgIgSCAlsqEEoKpDTCAKssAKARGwUACIAABSAAICwcAwRICViwQJMUbwAw0AGAAIJHCIAMAAQSOFQAYAAgkcA"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals(14, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(174, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(true, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(174, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); Assertions.assertEquals( Set.of(1), - tcfEuV2.getFieldValue("SpecialFeatureOptins")); + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions .assertEquals( Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeConsents")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("US", tcfEuV2.getFieldValue("PublisherCountryCode")); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(693, ((IntegerSet) tcfEuV2.getFieldValue("VendorConsents")).size()); + Assertions.assertEquals(693, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); - Assertions.assertEquals(254, ((IntegerSet) tcfEuV2.getFieldValue("VendorLegitimateInterests")).size()); + Assertions.assertEquals(254, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); } @Test public void testDecode6() { TcfEuV2 tcfEuV2 = new TcfEuV2("COv_eg6Ov_eg6AOADBENAaCgAP_AAH_AACiQAVEUQQoAIQAqIoghAAQgAA.YAAAAAAAAAAAAAAAAAA"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals(14, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(3, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(26, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(true, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(26, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); Assertions.assertEquals( Set.of(), - tcfEuV2.getFieldValue("SpecialFeatureOptins")); + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions .assertEquals( Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeConsents")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("US", tcfEuV2.getFieldValue("PublisherCountryCode")); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 25, 37, 42), tcfEuV2.getFieldValue("VendorConsents")); + Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 25, 37, 42), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 37, 42), - tcfEuV2.getFieldValue("VendorLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)); } @SuppressWarnings("unchecked") @@ -351,38 +351,38 @@ public void testDecode6() { public void testDecode7() throws DecodingException { TcfEuV2 tcfEuV2 = new TcfEuV2("COoC-kUOoC-kUAHABAENAwCoAIAAAELAAAwIF5wAoAAgAGAvMACX_ABBAAQAFA"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue("Created").toString()); - Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue("LastUpdated").toString()); - Assertions.assertEquals(7, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(0, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(48, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(true, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.CREATED).toString()); + Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED).toString()); + Assertions.assertEquals(7, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(48, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); Assertions.assertEquals( Set.of(1), - tcfEuV2.getFieldValue("SpecialFeatureOptins")); + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions.assertEquals( Set.of(1), - tcfEuV2.getFieldValue("PurposeConsents")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 7, 9, 10), - tcfEuV2.getFieldValue("PurposeLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("GB", tcfEuV2.getFieldValue("PublisherCountryCode")); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("GB", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(Set.of(1, 2, 3, 755), tcfEuV2.getFieldValue("VendorConsents")); + Assertions.assertEquals(Set.of(1, 2, 3, 755), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); Assertions.assertEquals(Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9), - tcfEuV2.getFieldValue("VendorLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(1, ((List)tcfEuV2.getFieldValue("PublisherRestrictions")).size()); - RangeEntry rangeEntry = ((List)tcfEuV2.getFieldValue("PublisherRestrictions")).get(0); + Assertions.assertEquals(1, ((List)tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).size()); + RangeEntry rangeEntry = ((List)tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).get(0); Assertions.assertEquals(1, rangeEntry.getKey()); Assertions.assertEquals(0, rangeEntry.getType()); Assertions.assertEquals(Set.of(10), rangeEntry.getIds()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java index ffc7e741..126b9b57 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.UspV1Field; public class UspV1Test { @@ -16,9 +17,9 @@ public void testEncode1() { @Test public void testEncode2() { UspV1 uspv1 = new UspV1(); - uspv1.setFieldValue("Notice", 'Y'); - uspv1.setFieldValue("OptOutSale", 'N'); - uspv1.setFieldValue("LspaCovered", 'N'); + uspv1.setFieldValue(UspV1Field.NOTICE, 'Y'); + uspv1.setFieldValue(UspV1Field.OPT_OUT_SALE, 'N'); + uspv1.setFieldValue(UspV1Field.LSPA_COVERED, 'N'); Assertions.assertEquals("1YNN", uspv1.encode()); } @@ -26,10 +27,10 @@ public void testEncode2() { @Test public void testEncode3() { UspV1 uspv1 = new UspV1(); - uspv1.setFieldValue("Version", 2); - uspv1.setFieldValue("Notice", 'N'); - uspv1.setFieldValue("OptOutSale", 'Y'); - uspv1.setFieldValue("LspaCovered", 'Y'); + uspv1.setFieldValue(UspV1Field.VERSION, 2); + uspv1.setFieldValue(UspV1Field.NOTICE, 'N'); + uspv1.setFieldValue(UspV1Field.OPT_OUT_SALE, 'Y'); + uspv1.setFieldValue(UspV1Field.LSPA_COVERED, 'Y'); Assertions.assertEquals("2NYY", uspv1.encode()); } @@ -37,29 +38,29 @@ public void testEncode3() { @Test public void testDecode1() throws DecodingException, InvalidFieldException { UspV1 uspv1 = new UspV1("1NYN"); - Assertions.assertEquals(1, uspv1.getFieldValue("Version")); - Assertions.assertEquals('N', uspv1.getFieldValue("Notice")); - Assertions.assertEquals('Y', uspv1.getFieldValue("OptOutSale")); - Assertions.assertEquals('N', uspv1.getFieldValue("LspaCovered")); + Assertions.assertEquals(1, uspv1.getFieldValue(UspV1Field.VERSION)); + Assertions.assertEquals('N', uspv1.getFieldValue(UspV1Field.NOTICE)); + Assertions.assertEquals('Y', uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE)); + Assertions.assertEquals('N', uspv1.getFieldValue(UspV1Field.LSPA_COVERED)); - Assertions.assertEquals(uspv1.getFieldValue("Version"), uspv1.getVersion()); - Assertions.assertEquals(uspv1.getFieldValue("Notice"), uspv1.getNotice()); - Assertions.assertEquals(uspv1.getFieldValue("OptOutSale"), uspv1.getOptOutSale()); - Assertions.assertEquals(uspv1.getFieldValue("LspaCovered"), uspv1.getLspaCovered()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.VERSION), uspv1.getVersion()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.NOTICE), uspv1.getNotice()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE), uspv1.getOptOutSale()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.LSPA_COVERED), uspv1.getLspaCovered()); } @Test public void testDecode2() throws DecodingException, InvalidFieldException { UspV1 uspv1 = new UspV1("1YNY"); - Assertions.assertEquals(1, uspv1.getFieldValue("Version")); - Assertions.assertEquals('Y', uspv1.getFieldValue("Notice")); - Assertions.assertEquals('N', uspv1.getFieldValue("OptOutSale")); - Assertions.assertEquals('Y', uspv1.getFieldValue("LspaCovered")); + Assertions.assertEquals(1, uspv1.getFieldValue(UspV1Field.VERSION)); + Assertions.assertEquals('Y', uspv1.getFieldValue(UspV1Field.NOTICE)); + Assertions.assertEquals('N', uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE)); + Assertions.assertEquals('Y', uspv1.getFieldValue(UspV1Field.LSPA_COVERED)); - Assertions.assertEquals(uspv1.getFieldValue("Version"), uspv1.getVersion()); - Assertions.assertEquals(uspv1.getFieldValue("Notice"), uspv1.getNotice()); - Assertions.assertEquals(uspv1.getFieldValue("OptOutSale"), uspv1.getOptOutSale()); - Assertions.assertEquals(uspv1.getFieldValue("LspaCovered"), uspv1.getLspaCovered()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.VERSION), uspv1.getVersion()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.NOTICE), uspv1.getNotice()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE), uspv1.getOptOutSale()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.LSPA_COVERED), uspv1.getLspaCovered()); } } From 3f5f9c8ba3fcfee143c7f3377106817ca0a88dbc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 21:27:02 -0500 Subject: [PATCH 077/146] toString --- .../encoder/datatype/AbstractEncodableBitStringDataType.java | 4 ++++ .../gpp/encoder/segment/AbstractLazilyEncodableSegment.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 5199842c..78abff3c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -58,4 +58,8 @@ public boolean isDirty() { public void setDirty(boolean dirty) { this.dirty = dirty; } + + public String toString() { + return String.valueOf(value); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 439326ed..81372e59 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -116,7 +116,7 @@ public String toString() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { E field = fieldNames.get(i); - sb.append(", ").append(field).append('=').append(get(field)); + sb.append(", ").append(field.getName()).append('=').append(get(field)); } sb.append('}'); return sb.toString(); From f9e14b0d0e3c8d31bedc83e19774f5d51cfec36f Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 23 Jan 2026 20:14:37 -0500 Subject: [PATCH 078/146] user headers to store state --- .../java/com/iab/gpp/encoder/GppModel.java | 41 +++++++------------ .../encoder/section/AbstractEncodable.java | 1 + .../com/iab/gpp/encoder/GppModelTest.java | 2 +- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 219a82d8..de7cc9ba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.PrimitiveIterator; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; @@ -38,13 +39,14 @@ public class GppModel extends AbstractEncodable { private final Map> sections = new HashMap<>(); - private boolean dirty = false; - + private final HeaderV1 header; public GppModel() { + this.header = new HeaderV1(); } public GppModel(String encodedString) { + this(); decode(encodedString); } @@ -116,7 +118,7 @@ private EncodableSection getOrCreateSection(String sectionName) { } if (section != null) { this.sections.put(sectionName, section); - this.dirty = true; + this.header.getSectionsIds().add(section.getId()); } } return section; @@ -171,7 +173,6 @@ public boolean hasSection(String sectionName) { public HeaderV1 getHeader() { ensureDecode(); - HeaderV1 header = new HeaderV1(); try { header.setFieldValue(HeaderV1Field.SECTION_IDS, this.getSectionIds()); } catch (InvalidFieldException e) { @@ -194,15 +195,16 @@ public void deleteSection(int sectionId) { } public void deleteSection(String sectionName) { - if (this.sections.remove(sectionName) != null) { - this.dirty = true; + EncodableSection removed = this.sections.remove(sectionName); + if (removed != null) { + this.header.getSectionsIds().remove(removed.getId()); } } public void clear() { if (!this.sections.isEmpty()) { this.sections.clear(); - this.dirty = true; + this.header.getSectionsIds().clear(); } } @@ -300,6 +302,7 @@ public List getSectionIds() { protected CharSequence doEncode() { int length = Sections.SECTION_ORDER.size(); List encodedSections = new ArrayList<>(length); + encodedSections.add(header.encodeCharSequence()); List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); @@ -309,14 +312,6 @@ protected CharSequence doEncode() { sectionIds.add(section.getId()); } } - - HeaderV1 header = new HeaderV1(); - try { - header.setFieldValue(HeaderV1Field.SECTION_IDS, getSectionIds()); - } catch (InvalidFieldException e) { - throw new EncodingException(e); - } - encodedSections.add(0, header.encodeCharSequence()); return SlicedCharSequence.join('~', encodedSections); } @@ -324,11 +319,11 @@ protected CharSequence doEncode() { protected void doDecode(CharSequence str) { if (str == null || str.isEmpty() || (str.charAt(0) == 'D' && str.charAt(1) == 'B')) { sections.clear(); + header.getSectionsIds().clear(); if(str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); - HeaderV1 header = new HeaderV1(encodedSections.get(0)); - sections.put(HeaderV1.NAME, header); + header.decode(encodedSections.get(0)); PrimitiveIterator.OfInt it = header.getSectionsIds().iterator(); int i = 1; @@ -397,15 +392,9 @@ protected void doDecode(CharSequence str) { } } else if (str.charAt(0) == 'C') { // old tcfeu only string - sections.clear(); - TcfEuV2 section = new TcfEuV2(str); sections.put(TcfEuV2.NAME, section); - - HeaderV1 header = new HeaderV1(); - header.setFieldValue(HeaderV1Field.SECTION_IDS, Arrays.asList(2)); - sections.put(HeaderV1.NAME, section); - + header.getSectionsIds().add(section.getId()); } else { throw new DecodingException("Unable to decode '" + str + "'"); } @@ -449,7 +438,7 @@ public String toString() { @Override public boolean isDirty() { - if (dirty) { + if (header.isDirty()) { return true; } int length = Sections.SECTION_ORDER.size(); @@ -465,7 +454,7 @@ public boolean isDirty() { @Override public void setDirty(boolean dirty) { - this.dirty = dirty; + header.setDirty(dirty); int length = Sections.SECTION_ORDER.size(); for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index 7fc75676..231264cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -24,6 +24,7 @@ protected final void ensureDecode() { public final void decode(CharSequence encodedString) { this.encoded = encodedString; + this.setDirty(false); this.decoded = false; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 7ae955d6..71aa195c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -815,7 +815,7 @@ public void testDecodingEmptyString() { GppModel gppModel = new GppModel("DBABTA~1---"); Assertions.assertEquals("DBABTA~1---", gppModel.encode()); - gppModel.decode(null); + gppModel.decode(""); Assertions.assertEquals("DBAA", gppModel.encode()); gppModel.setFieldValue("uspv1", UspV1Field.NOTICE, 'Y'); From 7639aafcf5b6821b44f9d91cc33ca2b586b1be09 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 23 Jan 2026 20:53:11 -0500 Subject: [PATCH 079/146] clean up registry of sections --- .../java/com/iab/gpp/encoder/GppModel.java | 292 ++++++------------ .../com/iab/gpp/encoder/section/Sections.java | 42 --- 2 files changed, 96 insertions(+), 238 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index de7cc9ba..e5676edb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -1,21 +1,16 @@ package com.iab.gpp.encoder; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.PrimitiveIterator; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import java.util.function.Supplier; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.AbstractEncodable; import com.iab.gpp.encoder.section.EncodableSection; import com.iab.gpp.encoder.section.HeaderV1; -import com.iab.gpp.encoder.section.Sections; import com.iab.gpp.encoder.section.SlicedCharSequence; import com.iab.gpp.encoder.section.TcfCaV1; import com.iab.gpp.encoder.section.TcfEuV2; @@ -38,7 +33,44 @@ import com.iab.gpp.encoder.section.UspV1; public class GppModel extends AbstractEncodable { - private final Map> sections = new HashMap<>(); + + private static final HashMap>> SECTION_ID_TO_CONSTRUCTOR = new HashMap<>(); + private static final HashMap SECTION_NAME_TO_ID = new HashMap<>(); + + static { + + List>> constructors = new ArrayList<>(); + + // register section constructors here + constructors.add(TcfEuV2::new); + constructors.add(TcfCaV1::new); + constructors.add(UspV1::new); + constructors.add(UsNat::new); + constructors.add(UsCa::new); + constructors.add(UsVa::new); + constructors.add(UsCo::new); + constructors.add(UsUt::new); + constructors.add(UsCt::new); + constructors.add(UsFl::new); + constructors.add(UsMt::new); + constructors.add(UsOr::new); + constructors.add(UsTx::new); + constructors.add(UsDe::new); + constructors.add(UsIa::new); + constructors.add(UsNe::new); + constructors.add(UsNh::new); + constructors.add(UsNj::new); + constructors.add(UsTn::new); + + for (Supplier> constructor : constructors) { + EncodableSection prototype = constructor.get(); + Integer id = prototype.getId(); + SECTION_ID_TO_CONSTRUCTOR.put(id, constructor); + SECTION_NAME_TO_ID.put(prototype.getName(), id); + } + } + + private final HashMap> sections = new HashMap<>(); private final HeaderV1 header; public GppModel() { @@ -50,97 +82,40 @@ public GppModel(String encodedString) { decode(encodedString); } - public void setFieldValue(int sectionId, FieldKey fieldName, Object value) { - setFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName, value); + public void setFieldValue(String sectionName, FieldKey fieldName, Object value) { + setFieldValue(SECTION_NAME_TO_ID.get(sectionName), fieldName, value); } - private EncodableSection getOrCreateSection(String sectionName) { - EncodableSection section = this.sections.get(sectionName); + private EncodableSection getOrCreateSection(Integer sectionId) { + EncodableSection section = this.sections.get(sectionId); if (section == null) { - switch(sectionName) { - case TcfEuV2.NAME: - section = new TcfEuV2(); - break; - case TcfCaV1.NAME: - section = new TcfCaV1(); - break; - case UspV1.NAME: - section = new UspV1(); - break; - case UsNat.NAME: - section = new UsNat(); - break; - case UsCa.NAME: - section = new UsCa(); - break; - case UsVa.NAME: - section = new UsVa(); - break; - case UsCo.NAME: - section = new UsCo(); - break; - case UsUt.NAME: - section = new UsUt(); - break; - case UsCt.NAME: - section = new UsCt(); - break; - case UsFl.NAME: - section = new UsFl(); - break; - case UsMt.NAME: - section = new UsMt(); - break; - case UsOr.NAME: - section = new UsOr(); - break; - case UsTx.NAME: - section = new UsTx(); - break; - case UsDe.NAME: - section = new UsDe(); - break; - case UsIa.NAME: - section = new UsIa(); - break; - case UsNe.NAME: - section = new UsNe(); - break; - case UsNh.NAME: - section = new UsNh(); - break; - case UsNj.NAME: - section = new UsNj(); - break; - case UsTn.NAME: - section = new UsTn(); - break; - } - if (section != null) { - this.sections.put(sectionName, section); + Supplier> constructor = SECTION_ID_TO_CONSTRUCTOR.get(sectionId); + if (constructor != null) { + section = constructor.get(); + this.sections.put(section.getId(), section); this.header.getSectionsIds().add(section.getId()); } } return section; } - public void setFieldValue(String sectionName, FieldKey fieldName, Object value) { + public void setFieldValue(int sectionId, FieldKey fieldName, Object value) { ensureDecode(); - EncodableSection section = getOrCreateSection(sectionName); + EncodableSection section = getOrCreateSection(sectionId); if (section != null) { section.setFieldValue(fieldName, value); } else { - throw new InvalidFieldException(sectionName + "." + fieldName + " not found"); + throw new InvalidFieldException(sectionId + "." + fieldName + " not found"); } } - public Object getFieldValue(int sectionId, FieldKey fieldName) { - return getFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); + public Object getFieldValue(String sectionName, FieldKey fieldName) { + return getFieldValue(SECTION_NAME_TO_ID.get(sectionName), fieldName); } - public Object getFieldValue(String sectionName, FieldKey fieldName) { + public Object getFieldValue(int sectionId, FieldKey fieldName) { ensureDecode(); - EncodableSection field = this.sections.get(sectionName); + EncodableSection field = this.sections.get(sectionId); if (field != null) { return field.getFieldValue(fieldName); } else { @@ -148,13 +123,13 @@ public Object getFieldValue(String sectionName, FieldKey fieldName) { } } - public boolean hasField(int sectionId, FieldKey fieldName) { - return hasField(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); + public boolean hasField(String sectionName, FieldKey fieldName) { + return hasField(SECTION_NAME_TO_ID.get(sectionName), fieldName); } - public boolean hasField(String sectionName, FieldKey fieldName) { + public boolean hasField(int sectionId, FieldKey fieldName) { ensureDecode(); - EncodableSection field = this.sections.get(sectionName); + EncodableSection field = this.sections.get(sectionId); if (field != null) { return field.hasField(fieldName); } else { @@ -162,40 +137,35 @@ public boolean hasField(String sectionName, FieldKey fieldName) { } } - public boolean hasSection(int sectionId) { - return hasSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); + public boolean hasSection(String sectionName) { + return hasSection(SECTION_NAME_TO_ID.get(sectionName)); } - public boolean hasSection(String sectionName) { + public boolean hasSection(int sectionId) { ensureDecode(); - return this.sections.containsKey(sectionName); + return this.sections.containsKey(sectionId); } public HeaderV1 getHeader() { ensureDecode(); - try { - header.setFieldValue(HeaderV1Field.SECTION_IDS, this.getSectionIds()); - } catch (InvalidFieldException e) { - - } return header; } public EncodableSection getSection(int sectionId) { - return getSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); + ensureDecode(); + return this.sections.get(sectionId); } public EncodableSection getSection(String sectionName) { - ensureDecode(); - return this.sections.get(sectionName); + return getSection(SECTION_NAME_TO_ID.get(sectionName)); } - public void deleteSection(int sectionId) { - deleteSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); + public void deleteSection(String sectionName) { + deleteSection(SECTION_NAME_TO_ID.get(sectionName)); } - public void deleteSection(String sectionName) { - EncodableSection removed = this.sections.remove(sectionName); + public void deleteSection(int sectionId) { + EncodableSection removed = this.sections.remove(sectionId); if (removed != null) { this.header.getSectionsIds().remove(removed.getId()); } @@ -286,31 +256,16 @@ public UsTn getUsTnSection() { public List getSectionIds() { ensureDecode(); - int length = Sections.SECTION_ORDER.size(); - List sectionIds = new ArrayList<>(length); - for (int i = 0; i < length; i++) { - String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = this.sections.get(sectionName); - if (section != null) { - sectionIds.add(section.getId()); - } - } - return sectionIds; + return new ArrayList<>(header.getSectionsIds()); } @Override protected CharSequence doEncode() { - int length = Sections.SECTION_ORDER.size(); - List encodedSections = new ArrayList<>(length); + List encodedSections = new ArrayList<>(); encodedSections.add(header.encodeCharSequence()); - List sectionIds = new ArrayList<>(length); - for (int i = 0; i < length; i++) { - String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = sections.get(sectionName); - if (section != null) { - encodedSections.add(section.encodeCharSequence()); - sectionIds.add(section.getId()); - } + for (Integer sectionId: header.getSectionsIds()) { + EncodableSection section = sections.get(sectionId); + encodedSections.add(section.encodeCharSequence()); } return SlicedCharSequence.join('~', encodedSections); } @@ -328,85 +283,34 @@ protected void doDecode(CharSequence str) { PrimitiveIterator.OfInt it = header.getSectionsIds().iterator(); int i = 1; while (it.hasNext()) { - CharSequence section = encodedSections.get(i++); - switch (it.nextInt()) { - case TcfEuV2.ID: - sections.put(TcfEuV2.NAME, new TcfEuV2(section)); - break; - case TcfCaV1.ID: - sections.put(TcfCaV1.NAME, new TcfCaV1(section)); - break; - case UspV1.ID: - sections.put(UspV1.NAME, new UspV1(section)); - break; - case UsCa.ID: - sections.put(UsCa.NAME, new UsCa(section)); - break; - case UsNat.ID: - sections.put(UsNat.NAME, new UsNat(section)); - break; - case UsVa.ID: - sections.put(UsVa.NAME, new UsVa(section)); - break; - case UsCo.ID: - sections.put(UsCo.NAME, new UsCo(section)); - break; - case UsUt.ID: - sections.put(UsUt.NAME, new UsUt(section)); - break; - case UsCt.ID: - sections.put(UsCt.NAME, new UsCt(section)); - break; - case UsFl.ID: - sections.put(UsFl.NAME, new UsFl(section)); - break; - case UsMt.ID: - sections.put(UsMt.NAME, new UsMt(section)); - break; - case UsOr.ID: - sections.put(UsOr.NAME, new UsOr(section)); - break; - case UsTx.ID: - sections.put(UsTx.NAME, new UsTx(section)); - break; - case UsDe.ID: - sections.put(UsDe.NAME, new UsDe(section)); - break; - case UsIa.ID: - sections.put(UsIa.NAME, new UsIa(section)); - break; - case UsNe.ID: - sections.put(UsNe.NAME, new UsNe(section)); - break; - case UsNh.ID: - sections.put(UsNh.NAME, new UsNh(section)); - break; - case UsNj.ID: - sections.put(UsNj.NAME, new UsNj(section)); - break; - case UsTn.ID: - sections.put(UsTn.NAME, new UsTn(section)); - break; + CharSequence encodedSection = encodedSections.get(i++); + int sectionId = it.nextInt(); + EncodableSection section = getOrCreateSection(sectionId); + if (section != null) { + section.decode(encodedSection); + } else { + // we do not support encoding this section + header.getSectionsIds().removeInt(sectionId); } } } } else if (str.charAt(0) == 'C') { // old tcfeu only string - TcfEuV2 section = new TcfEuV2(str); - sections.put(TcfEuV2.NAME, section); + EncodableSection section = getOrCreateSection(TcfEuV2.ID); + section.decode(str); header.getSectionsIds().add(section.getId()); } else { throw new DecodingException("Unable to decode '" + str + "'"); } } - public String encodeSection(int sectionId) { - return encodeSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); + public String encodeSection(String sectionName) { + return encodeSection(SECTION_NAME_TO_ID.get(sectionName)); } - public String encodeSection(String sectionName) { + public String encodeSection(int sectionId) { ensureDecode(); - EncodableSection section = this.sections.get(sectionName); + EncodableSection section = this.sections.get(sectionId); if (section != null) { return section.encode(); } else { @@ -414,13 +318,13 @@ public String encodeSection(String sectionName) { } } - public void decodeSection(int sectionId, String encodedString) { - decodeSection(Sections.SECTION_ID_NAME_MAP.get(sectionId), encodedString); + public void decodeSection(String sectionName, String encodedString) { + decodeSection(SECTION_NAME_TO_ID.get(sectionName), encodedString); } - public void decodeSection(String sectionName, String encodedString) { + public void decodeSection(int sectionId, String encodedString) { ensureDecode(); - EncodableSection section = getOrCreateSection(sectionName); + EncodableSection section = getOrCreateSection(sectionId); if (section != null) { section.decode(encodedString); } @@ -441,10 +345,8 @@ public boolean isDirty() { if (header.isDirty()) { return true; } - int length = Sections.SECTION_ORDER.size(); - for (int i = 0; i < length; i++) { - String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = this.sections.get(sectionName); + for (Integer sectionId: header.getSectionsIds()) { + EncodableSection section = sections.get(sectionId); if (section != null && section.isDirty()) { return true; } @@ -455,10 +357,8 @@ public boolean isDirty() { @Override public void setDirty(boolean dirty) { header.setDirty(dirty); - int length = Sections.SECTION_ORDER.size(); - for (int i = 0; i < length; i++) { - String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = this.sections.get(sectionName); + for (Integer sectionId: header.getSectionsIds()) { + EncodableSection section = sections.get(sectionId); if (section != null) { section.setDirty(true); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java deleted file mode 100644 index a438d217..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.iab.gpp.encoder.section; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -public final class Sections { - private Sections() {} - - public static final List SECTION_ORDER; - - public static final Map SECTION_ID_NAME_MAP; - - static { - SECTION_ID_NAME_MAP = new HashMap<>(); - - SECTION_ID_NAME_MAP.put(TcfEuV2.ID, TcfEuV2.NAME); - SECTION_ID_NAME_MAP.put(TcfCaV1.ID, TcfCaV1.NAME); - SECTION_ID_NAME_MAP.put(UspV1.ID, UspV1.NAME); - SECTION_ID_NAME_MAP.put(UsNat.ID, UsNat.NAME); - SECTION_ID_NAME_MAP.put(UsCa.ID, UsCa.NAME); - SECTION_ID_NAME_MAP.put(UsVa.ID, UsVa.NAME); - SECTION_ID_NAME_MAP.put(UsCo.ID, UsCo.NAME); - SECTION_ID_NAME_MAP.put(UsUt.ID, UsUt.NAME); - SECTION_ID_NAME_MAP.put(UsCt.ID, UsCt.NAME); - SECTION_ID_NAME_MAP.put(UsFl.ID, UsFl.NAME); - SECTION_ID_NAME_MAP.put(UsMt.ID, UsMt.NAME); - SECTION_ID_NAME_MAP.put(UsOr.ID, UsOr.NAME); - SECTION_ID_NAME_MAP.put(UsTx.ID, UsTx.NAME); - SECTION_ID_NAME_MAP.put(UsDe.ID, UsDe.NAME); - SECTION_ID_NAME_MAP.put(UsIa.ID, UsIa.NAME); - SECTION_ID_NAME_MAP.put(UsNe.ID, UsNe.NAME); - SECTION_ID_NAME_MAP.put(UsNh.ID, UsNh.NAME); - SECTION_ID_NAME_MAP.put(UsNj.ID, UsNj.NAME); - SECTION_ID_NAME_MAP.put(UsTn.ID, UsTn.NAME); - - SECTION_ORDER = new ArrayList(SECTION_ID_NAME_MAP.keySet()).stream().sorted() - .map(id -> SECTION_ID_NAME_MAP.get(id)).collect(Collectors.toList()); - } -} From a9e21093372d8d9a73fa195799541d9628ef82e1 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 23 Jan 2026 21:04:50 -0500 Subject: [PATCH 080/146] cleanup --- .../java/com/iab/gpp/encoder/GppModel.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index e5676edb..1a354f90 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -92,7 +92,7 @@ private EncodableSection getOrCreateSection(Integer sectionId) { Supplier> constructor = SECTION_ID_TO_CONSTRUCTOR.get(sectionId); if (constructor != null) { section = constructor.get(); - this.sections.put(section.getId(), section); + this.sections.put(sectionId, section); this.header.getSectionsIds().add(section.getId()); } } @@ -114,8 +114,7 @@ public Object getFieldValue(String sectionName, FieldKey fieldName) { } public Object getFieldValue(int sectionId, FieldKey fieldName) { - ensureDecode(); - EncodableSection field = this.sections.get(sectionId); + EncodableSection field = getSection(sectionId); if (field != null) { return field.getFieldValue(fieldName); } else { @@ -128,8 +127,7 @@ public boolean hasField(String sectionName, FieldKey fieldName) { } public boolean hasField(int sectionId, FieldKey fieldName) { - ensureDecode(); - EncodableSection field = this.sections.get(sectionId); + EncodableSection field = getSection(sectionId); if (field != null) { return field.hasField(fieldName); } else { @@ -165,6 +163,7 @@ public void deleteSection(String sectionName) { } public void deleteSection(int sectionId) { + ensureDecode(); EncodableSection removed = this.sections.remove(sectionId); if (removed != null) { this.header.getSectionsIds().remove(removed.getId()); @@ -172,6 +171,7 @@ public void deleteSection(int sectionId) { } public void clear() { + ensureDecode(); if (!this.sections.isEmpty()) { this.sections.clear(); this.header.getSectionsIds().clear(); @@ -289,7 +289,7 @@ protected void doDecode(CharSequence str) { if (section != null) { section.decode(encodedSection); } else { - // we do not support encoding this section + // we do not support re-encoding this section header.getSectionsIds().removeInt(sectionId); } } @@ -309,8 +309,7 @@ public String encodeSection(String sectionName) { } public String encodeSection(int sectionId) { - ensureDecode(); - EncodableSection section = this.sections.get(sectionId); + EncodableSection section = getSection(sectionId); if (section != null) { return section.encode(); } else { @@ -332,12 +331,14 @@ public void decodeSection(int sectionId, String encodedString) { public String toString() { ensureDecode(); - List sectionIds = getSectionIds(); - List pieces = new ArrayList<>(sectionIds.size()); - for (Integer sectionId : sectionIds) { - pieces.add(getSection(sectionId).toString()); + StringBuilder sb = new StringBuilder(); + sb.append('[').append(header); + for (Integer sectionId: header.getSectionsIds()) { + EncodableSection section = sections.get(sectionId); + sb.append(", ").append(section); } - return pieces.toString(); + sb.append(']'); + return sb.toString(); } @Override From 14e87aeab2f1e909f25777cc14929059ff7531b4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 23 Jan 2026 21:08:35 -0500 Subject: [PATCH 081/146] notes --- iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 1a354f90..9f7a0b36 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -34,11 +34,11 @@ public class GppModel extends AbstractEncodable { + // NOTE: we genrally use concrete types to avoid the cost of interface calls private static final HashMap>> SECTION_ID_TO_CONSTRUCTOR = new HashMap<>(); private static final HashMap SECTION_NAME_TO_ID = new HashMap<>(); static { - List>> constructors = new ArrayList<>(); // register section constructors here From 45f0c2b4611207445199551b9bcb916f938bbc20 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 19:53:57 -0500 Subject: [PATCH 082/146] use array --- .../gpp/encoder/section/EncodableSection.java | 63 +++++++++++-------- .../com/iab/gpp/encoder/section/HeaderV1.java | 3 +- .../com/iab/gpp/encoder/section/TcfCaV1.java | 18 +++--- .../com/iab/gpp/encoder/section/TcfEuV2.java | 30 +++++---- .../com/iab/gpp/encoder/section/UsCa.java | 20 +++--- .../com/iab/gpp/encoder/section/UsCo.java | 20 +++--- .../com/iab/gpp/encoder/section/UsCt.java | 20 +++--- .../com/iab/gpp/encoder/section/UsDe.java | 20 +++--- .../com/iab/gpp/encoder/section/UsFl.java | 3 +- .../com/iab/gpp/encoder/section/UsIa.java | 20 +++--- .../com/iab/gpp/encoder/section/UsMt.java | 20 +++--- .../com/iab/gpp/encoder/section/UsNat.java | 20 +++--- .../com/iab/gpp/encoder/section/UsNe.java | 20 +++--- .../com/iab/gpp/encoder/section/UsNh.java | 20 +++--- .../com/iab/gpp/encoder/section/UsNj.java | 20 +++--- .../com/iab/gpp/encoder/section/UsOr.java | 20 +++--- .../com/iab/gpp/encoder/section/UsTn.java | 20 +++--- .../com/iab/gpp/encoder/section/UsTx.java | 20 +++--- .../com/iab/gpp/encoder/section/UsUt.java | 3 +- .../com/iab/gpp/encoder/section/UsVa.java | 3 +- .../com/iab/gpp/encoder/section/UspV1.java | 3 +- 21 files changed, 181 insertions(+), 205 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 72d3bf4a..089ae70b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -9,12 +9,22 @@ public abstract class EncodableSection & FieldKey> extends AbstractEncodable { - protected final List> segments; + private final Object[] segments; - protected EncodableSection(List> segments) { + @SafeVarargs + protected EncodableSection(EncodableSegment... segments) { this.segments = segments; } + protected final int size() { + return segments.length; + } + + @SuppressWarnings("unchecked") + protected final EncodableSegment getSegment(int index) { + return (EncodableSegment) segments[index]; + } + public abstract int getId(); public abstract String getName(); @@ -23,26 +33,26 @@ protected EncodableSection(List> segments) { @Override protected void doDecode(CharSequence encodedString) { - int numSegments = segments.size(); + int numSegments = size(); if (numSegments == 1) { - segments.get(0).decode(encodedString); + getSegment(0).decode(encodedString); return; } List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < numSegments; i++) { - segments.get(i).decode(encodedSegments.get(i)); + getSegment(i).decode(encodedSegments.get(i)); } } @Override protected CharSequence doEncode() { - int numSegments = segments.size(); + int numSegments = size(); if (numSegments == 1) { - return segments.get(0).encodeCharSequence(); + return getSegment(0).encodeCharSequence(); } List encodedSegments = new ArrayList<>(numSegments); for (int i = 0; i < numSegments; i++) { - encodedSegments.add(segments.get(i).encodeCharSequence()); + encodedSegments.add(getSegment(i).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); } @@ -50,9 +60,9 @@ protected CharSequence doEncode() { public final boolean hasField(FieldKey fieldName) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null && segment.getField(key) != null) { return true; @@ -65,9 +75,9 @@ public final boolean hasField(FieldKey fieldName) { public final boolean hasField(E fieldName) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); if (segment.getField(fieldName) != null) { return true; } @@ -79,9 +89,9 @@ public final boolean hasField(E fieldName) { public final Object getFieldValue(FieldKey fieldName) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null) { DataType field = segment.getField(key); @@ -97,9 +107,9 @@ public final Object getFieldValue(FieldKey fieldName) { public final Object getFieldValue(E fieldName) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); DataType field = segment.getField(fieldName); if (field != null) { return field.getValue(); @@ -112,9 +122,9 @@ public final Object getFieldValue(E fieldName) { public final void setFieldValue(FieldKey fieldName, Object value) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null) { DataType field = segment.getField(key); @@ -132,9 +142,9 @@ public final void setFieldValue(FieldKey fieldName, Object value) { public final void setFieldValue(E fieldName, Object value) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); DataType field = segment.getField(fieldName); if(field != null) { field.setValue(value); @@ -152,9 +162,9 @@ protected void onSet(E fieldName) { @Override public final boolean isDirty() { - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - if (segments.get(i).isDirty()) { + if (getSegment(i).isDirty()) { return true; } } @@ -163,9 +173,9 @@ public final boolean isDirty() { @Override public final void setDirty(boolean dirty) { - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - segments.get(i).setDirty(dirty); + getSegment(i).setDirty(dirty); } } @@ -174,8 +184,9 @@ public final String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); - for (EncodableSegment segment : segments) { - sb.append(", ").append(segment.toString()); + int numSegments = size(); + for (int i = 0; i < numSegments; i++) { + sb.append(", ").append(getSegment(i).toString()); } sb.append('}'); return sb.toString(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 6bcd8d55..4f23d3b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; @@ -12,7 +11,7 @@ public class HeaderV1 extends EncodableSection { public static final String NAME = "header"; public HeaderV1() { - super(Collections.singletonList(new HeaderV1CoreSegment())); + super(new HeaderV1CoreSegment()); } public HeaderV1(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index bb461535..261dd565 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -2,13 +2,11 @@ import java.time.Instant; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.TcfCaV1CoreSegment; import com.iab.gpp.encoder.segment.TcfCaV1DisclosedVendorsSegment; import com.iab.gpp.encoder.segment.TcfCaV1PublisherPurposesSegment; @@ -20,7 +18,7 @@ public class TcfCaV1 extends EncodableSection { public static final String NAME = "tcfcav1"; public TcfCaV1() { - super(Arrays.>asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment())); + super(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); } public TcfCaV1(CharSequence encodedString) { @@ -64,11 +62,11 @@ protected void doDecode(CharSequence encodedString) { char firstChar = encodedSegment.charAt(0); if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegment); + getSegment(0).decode(encodedSegment); } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(2).decode(encodedSegment); + getSegment(2).decode(encodedSegment); } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegment); + getSegment(1).decode(encodedSegment); } else { throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } @@ -78,12 +76,12 @@ protected void doDecode(CharSequence encodedString) { @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + encodedSegments.add(getSegment(1).encodeCharSequence()); if(!this.getDisclosedVendors().isEmpty()) { - encodedSegments.add(segments.get(2).encodeCharSequence()); + encodedSegments.add(getSegment(2).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index d953f315..c931a4fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -2,13 +2,11 @@ import java.time.Instant; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.TcfEuV2CoreSegment; import com.iab.gpp.encoder.segment.TcfEuV2PublisherPurposesSegment; import com.iab.gpp.encoder.segment.TcfEuV2VendorsAllowedSegment; @@ -21,7 +19,7 @@ public class TcfEuV2 extends EncodableSection { public static final String NAME = "tcfeuv2"; public TcfEuV2() { - super(Arrays.>asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment())); + super(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); } public TcfEuV2(CharSequence encodedString) { @@ -67,13 +65,13 @@ public void doDecode(CharSequence encodedString) { // unfortunately, the segment ordering doesn't match the segment ids if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegment); + getSegment(0).decode(encodedSegment); } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(3).decode(encodedSegment); + getSegment(3).decode(encodedSegment); } else if(firstChar >= 'Q' && firstChar <= 'X') { - segments.get(2).decode(encodedSegment); + getSegment(2).decode(encodedSegment); } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegment); + getSegment(1).decode(encodedSegment); } else { throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } @@ -83,21 +81,21 @@ public void doDecode(CharSequence encodedString) { @Override public CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); - if (segments.size() >= 1) { - encodedSegments.add(segments.get(0).encodeCharSequence()); + List encodedSegments = new ArrayList<>(size()); + if (size() >= 1) { + encodedSegments.add(getSegment(0).encodeCharSequence()); Boolean isServiceSpecific = (Boolean) this.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC); if (isServiceSpecific) { - if (segments.size() >= 2) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + if (size() >= 2) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } } else { - if (segments.size() >= 2) { - encodedSegments.add(segments.get(2).encodeCharSequence()); + if (size() >= 2) { + encodedSegments.add(getSegment(2).encodeCharSequence()); - if (segments.size() >= 3) { - encodedSegments.add(segments.get(3).encodeCharSequence()); + if (size() >= 3) { + encodedSegments.add(getSegment(3).encodeCharSequence()); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index d5ab9d13..aea95ba5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCaCoreSegment; import com.iab.gpp.encoder.segment.UsCaGpcSegment; @@ -16,7 +14,7 @@ public class UsCa extends EncodableSection { public static final String NAME = "usca"; public UsCa() { - super(Arrays.>asList(new UsCaCoreSegment(), new UsCaGpcSegment())); + super(new UsCaCoreSegment(), new UsCaGpcSegment()); } public UsCa(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 89b8f8e2..8cb51769 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCoCoreSegment; import com.iab.gpp.encoder.segment.UsCoGpcSegment; @@ -16,7 +14,7 @@ public class UsCo extends EncodableSection { public static final String NAME = "usco"; public UsCo() { - super(Arrays.>asList(new UsCoCoreSegment(), new UsCoGpcSegment())); + super(new UsCoCoreSegment(), new UsCoGpcSegment()); } public UsCo(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 96a59d57..d82f9442 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCtCoreSegment; import com.iab.gpp.encoder.segment.UsCtGpcSegment; @@ -16,7 +14,7 @@ public class UsCt extends EncodableSection { public static final String NAME = "usct"; public UsCt() { - super(Arrays.>asList(new UsCtCoreSegment(), new UsCtGpcSegment())); + super(new UsCtCoreSegment(), new UsCtGpcSegment()); } public UsCt(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 5e72b828..f1d12cfa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsDeCoreSegment; import com.iab.gpp.encoder.segment.UsDeGpcSegment; @@ -16,7 +14,7 @@ public class UsDe extends EncodableSection { public static final String NAME = "usde"; public UsDe() { - super(Arrays.>asList(new UsDeCoreSegment(), new UsDeGpcSegment())); + super(new UsDeCoreSegment(), new UsDeGpcSegment()); } public UsDe(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if (segments.size() >= 2 && segments.get(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if (size() >= 2 && getSegment(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index fc444871..fe9de548 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.segment.UsFlCoreSegment; @@ -12,7 +11,7 @@ public class UsFl extends EncodableSection { public static final String NAME = "usfl"; public UsFl() { - super(Collections.singletonList(new UsFlCoreSegment())); + super(new UsFlCoreSegment()); } public UsFl(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 87e7a493..1b9e159b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsIaCoreSegment; import com.iab.gpp.encoder.segment.UsIaGpcSegment; @@ -16,7 +14,7 @@ public class UsIa extends EncodableSection { public static final String NAME = "usia"; public UsIa() { - super(Arrays.>asList(new UsIaCoreSegment(), new UsIaGpcSegment())); + super(new UsIaCoreSegment(), new UsIaGpcSegment()); } public UsIa(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if (segments.size() >= 2 && segments.get(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if (size() >= 2 && getSegment(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 56ee980d..bc014bf7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; -import java.util.Arrays; import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsMtCoreSegment; import com.iab.gpp.encoder.segment.UsMtGpcSegment; @@ -16,7 +14,7 @@ public class UsMt extends EncodableSection { public static final String NAME = "usmt"; public UsMt() { - super(Arrays.>asList(new UsMtCoreSegment(), new UsMtGpcSegment())); + super(new UsMtCoreSegment(), new UsMtGpcSegment()); } public UsMt(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 44e85cc7..92036efd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNatCoreSegment; import com.iab.gpp.encoder.segment.UsNatGpcSegment; @@ -16,7 +14,7 @@ public class UsNat extends EncodableSection { public static final String NAME = "usnat"; public UsNat() { - super(Arrays.>asList(new UsNatCoreSegment(), new UsNatGpcSegment())); + super(new UsNatCoreSegment(), new UsNatGpcSegment()); } public UsNat(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 54fb595f..7bbb4856 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNeCoreSegment; import com.iab.gpp.encoder.segment.UsNeGpcSegment; @@ -16,7 +14,7 @@ public class UsNe extends EncodableSection { public static final String NAME = "usne"; public UsNe() { - super(Arrays.>asList(new UsNeCoreSegment(), new UsNeGpcSegment())); + super(new UsNeCoreSegment(), new UsNeGpcSegment()); } public UsNe(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 4c29c10e..cdb533b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNhCoreSegment; import com.iab.gpp.encoder.segment.UsNhGpcSegment; @@ -16,7 +14,7 @@ public class UsNh extends EncodableSection { public static final String NAME = "usnh"; public UsNh() { - super(Arrays.>asList(new UsNhCoreSegment(), new UsNhGpcSegment())); + super(new UsNhCoreSegment(), new UsNhGpcSegment()); } public UsNh(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index a0731775..720b74cc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNjCoreSegment; import com.iab.gpp.encoder.segment.UsNjGpcSegment; @@ -16,7 +14,7 @@ public class UsNj extends EncodableSection { public static final String NAME = "usnj"; public UsNj() { - super(Arrays.>asList(new UsNjCoreSegment(), new UsNjGpcSegment())); + super(new UsNjCoreSegment(), new UsNjGpcSegment()); } public UsNj(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index edb73dbe..81c0293a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; -import java.util.Arrays; import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsOrCoreSegment; import com.iab.gpp.encoder.segment.UsOrGpcSegment; @@ -16,7 +14,7 @@ public class UsOr extends EncodableSection { public static final String NAME = "usor"; public UsOr() { - super(Arrays.>asList(new UsOrCoreSegment(), new UsOrGpcSegment())); + super(new UsOrCoreSegment(), new UsOrGpcSegment()); } public UsOr(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 32cd04fe..a04d9b81 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsTnCoreSegment; import com.iab.gpp.encoder.segment.UsTnGpcSegment; @@ -16,7 +14,7 @@ public class UsTn extends EncodableSection { public static final String NAME = "ustn"; public UsTn() { - super(Arrays.>asList(new UsTnCoreSegment(), new UsTnGpcSegment())); + super(new UsTnCoreSegment(), new UsTnGpcSegment()); } public UsTn(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); if(encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if(encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 56ad82ad..c932fe98 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; -import java.util.Arrays; import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsTxCoreSegment; import com.iab.gpp.encoder.segment.UsTxGpcSegment; @@ -16,7 +14,7 @@ public class UsTx extends EncodableSection { public static final String NAME = "ustx"; public UsTx() { - super(Arrays.>asList(new UsTxCoreSegment(), new UsTxGpcSegment())); + super(new UsTxCoreSegment(), new UsTxGpcSegment()); } public UsTx(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 9cd0fce8..68a7a729 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.segment.UsUtCoreSegment; @@ -12,7 +11,7 @@ public class UsUt extends EncodableSection { public static final String NAME = "usut"; public UsUt() { - super(Collections.singletonList(new UsUtCoreSegment())); + super(new UsUtCoreSegment()); } public UsUt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 05fc17e2..ee12afe5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.segment.UsVaCoreSegment; @@ -12,7 +11,7 @@ public class UsVa extends EncodableSection { public static final String NAME = "usva"; public UsVa() { - super(Collections.singletonList(new UsVaCoreSegment())); + super(new UsVaCoreSegment()); } public UsVa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index e8f231be..615badc3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.segment.UspV1CoreSegment; @@ -11,7 +10,7 @@ public class UspV1 extends EncodableSection { public static final String NAME = "uspv1"; public UspV1() { - super(Collections.singletonList(new UspV1CoreSegment())); + super(new UspV1CoreSegment()); } public UspV1(CharSequence encodedString) { From fba9fbbb06ac7b6800c984d6b412499a5a3235f9 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 19:57:26 -0500 Subject: [PATCH 083/146] cleanup --- .../src/main/java/com/iab/gpp/encoder/GppModel.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 9f7a0b36..89c7c496 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -93,7 +93,7 @@ private EncodableSection getOrCreateSection(Integer sectionId) { if (constructor != null) { section = constructor.get(); this.sections.put(sectionId, section); - this.header.getSectionsIds().add(section.getId()); + this.header.getSectionsIds().addInt(section.getId()); } } return section; @@ -166,7 +166,7 @@ public void deleteSection(int sectionId) { ensureDecode(); EncodableSection removed = this.sections.remove(sectionId); if (removed != null) { - this.header.getSectionsIds().remove(removed.getId()); + this.header.getSectionsIds().removeInt(removed.getId()); } } @@ -298,7 +298,6 @@ protected void doDecode(CharSequence str) { // old tcfeu only string EncodableSection section = getOrCreateSection(TcfEuV2.ID); section.decode(str); - header.getSectionsIds().add(section.getId()); } else { throw new DecodingException("Unable to decode '" + str + "'"); } From 647eb79841bd98bfb397ea8773557de25bce88e9 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 21:25:44 -0500 Subject: [PATCH 084/146] another size --- .../src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java | 3 ++- .../src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java | 3 ++- .../src/main/java/com/iab/gpp/encoder/section/UsCa.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsCo.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsCt.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsDe.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsIa.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsMt.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsNat.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsNe.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsNh.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsNj.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsOr.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsTn.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsTx.java | 5 +++-- 15 files changed, 43 insertions(+), 28 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 261dd565..18566835 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -44,7 +44,8 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < encodedSegments.size(); i++) { + int numEncodedSegments = encodedSegments.size(); + for (int i = 0; i < numEncodedSegments; i++) { /** * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index c931a4fa..54b54042 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -45,7 +45,8 @@ public int getVersion() { @Override public void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < encodedSegments.size(); i++) { + int numEncodedSegments = encodedSegments.size(); + for (int i = 0; i < numEncodedSegments; i++) { /** * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index aea95ba5..751b3efd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 8cb51769..6edcdc50 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index d82f9442..ae5d2425 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index f1d12cfa..b8813500 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 1b9e159b..b3aed14b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index bc014bf7..37ad215a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 92036efd..c120e0b0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 7bbb4856..4ecd1d52 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index cdb533b6..d4df1a83 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 720b74cc..973d850a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 81c0293a..8c976cea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index a04d9b81..bc60d071 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); + int numEncodedSegments = encodedSegments.size(); - if(encodedSegments.size() > 0) { + if(numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if(encodedSegments.size() > 1) { + if(numEncodedSegments > 1) { getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index c932fe98..05c1d5c0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { From 46843c744e3a754cd428d520507c381769422ff0 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 27 Jan 2026 20:57:57 -0500 Subject: [PATCH 085/146] fix sizing --- .../src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java | 2 +- .../com/iab/gpp/encoder/datatype/encoder/IntegerSet.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 3c9f4b92..09242b3f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -23,7 +23,7 @@ public BitSet(int initialCapacity) { } public BitSet() { - this(0); + this(new long[0]); } public static int wordIndex(int index) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 241cbf00..04757d67 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -33,12 +33,12 @@ public IntegerSet(BitSet bitSet, int from, int to, int adjustment) { this.adjustment = adjustment; } - public IntegerSet(int limit) { - this(new BitSet(), 0, limit, 0); + public IntegerSet(int limit) { + this(new BitSet(limit), 0, limit, 0); } public IntegerSet() { - this(MAX_COLLECTION_SIZE); + this(new BitSet(), 0, MAX_COLLECTION_SIZE, 0); } @Override From e50a578032b5c03e4e1dc32aab9278d26fa431ab Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 27 Jan 2026 21:28:41 -0500 Subject: [PATCH 086/146] fix dirty on init --- .../datatype/AbstractEncodableBitStringDataType.java | 12 ++++++++---- .../iab/gpp/encoder/datatype/EncodableBoolean.java | 2 +- .../iab/gpp/encoder/datatype/EncodableDatetime.java | 2 +- .../encoder/datatype/EncodableFibonacciInteger.java | 4 ++-- .../gpp/encoder/datatype/EncodableFixedInteger.java | 2 +- .../encoder/datatype/EncodableFixedIntegerList.java | 2 +- .../gpp/encoder/datatype/EncodableFixedString.java | 2 +- .../iab/gpp/encoder/datatype/UnencodableBoolean.java | 2 +- .../iab/gpp/encoder/section/AbstractEncodable.java | 1 - 9 files changed, 16 insertions(+), 13 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 78abff3c..fe7f9842 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -9,8 +9,8 @@ public abstract class AbstractEncodableBitStringDataType extends EncodableDataType { //this if for backwards compatibility with the newer fields protected boolean hardFailIfMissing = true; - protected boolean dirty = false; - protected Predicate validator = null; + private boolean dirty = false; + private Predicate validator = null; protected T value; protected AbstractEncodableBitStringDataType(boolean hardFailIfMissing) { @@ -30,12 +30,16 @@ public final T getValue() { return this.value; } - @SuppressWarnings("unchecked") public void setValue(Object value) { + setValue(value, true); + } + + @SuppressWarnings("unchecked") + protected final void setValue(Object value, boolean dirty) { T v = (T) value; if (validator == null || validator.test(v)) { this.value = v; - this.dirty = true; + this.dirty = dirty; } else { if (v instanceof Collection) { throw new ValidationException("Invalid value '" diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 20a66fb4..d04af67c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -10,7 +10,7 @@ public final class EncodableBoolean extends AbstractEncodableBitStringDataType Date: Tue, 27 Jan 2026 22:07:11 -0500 Subject: [PATCH 087/146] ; --- .../com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 7b34c036..0ddf6dee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -43,7 +43,7 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { int nextIndex = index + BASE64_BITS; int n = FixedIntegerEncoder.decode(bitString, index, nextIndex); str.append(DICT.charAt(n)); - index = nextIndex;; + index = nextIndex; } catch (DecodingException e) { throw new EncodingException("Unencodable Base64Url '" + bitString + "'"); } From 4e7366331305963c776e8c2544f61a807f6a8d2b Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 00:24:35 -0500 Subject: [PATCH 088/146] upgrade slicing methodology to use indexOf --- .../encoder/section/SlicedCharSequence.java | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java index 234bf439..c9b2aaa2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -6,27 +6,43 @@ public final class SlicedCharSequence implements CharSequence { private static final String EMPTY = ""; - private final CharSequence base; + private final String base; private final int start; private final int end; - private SlicedCharSequence(CharSequence base, int start, int end) { + private SlicedCharSequence(String base, int start, int end) { this.base = base; this.start = start; this.end = end; } public static List split(CharSequence charSequence, char splitter) { - List out = new ArrayList<>(1); - int length = charSequence.length(); - int start = 0; - for (int i = 0; i < length; i++) { - if (charSequence.charAt(i) == splitter) { - out.add(new SlicedCharSequence(charSequence, start, i)); - start = i + 1; - } + // the first time we see some other CharSequence we convert to a String. + // this keeps all derived SlicedCharSequence instances anchored to the same base String. + // this is important because String.indexOf internally uses an optimized intrinsic. + // CharSequence does not have indexOf, only charAt which is quite slow in comparison. + // also we avoid a recursive structure of SlicedCharSequence. + String base; + int start; + int end; + if (charSequence instanceof SlicedCharSequence) { + SlicedCharSequence slicedCharSequence = (SlicedCharSequence) charSequence; + base = slicedCharSequence.base; + start = slicedCharSequence.start; + end = slicedCharSequence.end; + } else { + base = charSequence.toString(); + start = 0; + end = base.length(); + } + // most sections/segments have less than 4 components + List out = new ArrayList<>(4); + int next = 0; + while ((next = base.indexOf(splitter, start, end)) != -1) { + out.add(new SlicedCharSequence(base, start, next)); + start = next + 1; } - out.add(new SlicedCharSequence(charSequence, start, length)); + out.add(new SlicedCharSequence(base, start, end)); return out; } From f463f6bd99debbcc433a17453b833e631dbac7a4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 00:37:01 -0500 Subject: [PATCH 089/146] substring --- .../java/com/iab/gpp/encoder/section/SlicedCharSequence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java index c9b2aaa2..85c7e5f7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -84,7 +84,7 @@ public CharSequence subSequence(int newStart, int newEnd) { @Override public String toString() { - return base.subSequence(start, end).toString(); + return base.substring(start, end); } } From a8d48c579c3a7ae083bbfb55dad5ef210f61a1c0 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 00:44:54 -0500 Subject: [PATCH 090/146] clear only if something was there --- .../src/main/java/com/iab/gpp/encoder/GppModel.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 89c7c496..c21c4a9c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -273,8 +273,10 @@ protected CharSequence doEncode() { @Override protected void doDecode(CharSequence str) { if (str == null || str.isEmpty() || (str.charAt(0) == 'D' && str.charAt(1) == 'B')) { - sections.clear(); - header.getSectionsIds().clear(); + if (!sections.isEmpty()) { + sections.clear(); + header.getSectionsIds().clear(); + } if(str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); From 9ea3b0884ab4ef4848c3c34e4ebb755d8700ebcc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 13:57:39 -0500 Subject: [PATCH 091/146] do base64 in blocks --- .../base64/AbstractBase64UrlEncoder.java | 70 +++++++++++++------ .../com/iab/gpp/encoder/bitstring/BitSet.java | 45 +++++++----- 2 files changed, 73 insertions(+), 42 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 0ddf6dee..39a29ac0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -13,21 +13,22 @@ public abstract class AbstractBase64UrlEncoder { protected abstract void pad(BitStringBuilder bitString); private static final int BASE64_BITS = 6; - private static final long NO_SYMBOL = -1; + private static final int NO_SYMBOL = -1; /** * Base 64 URL character set. Different from standard Base64 char set in that '+' and '/' are * replaced with '-' and '_'. */ private static final String DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; private static final int REVERSE_DICT_SIZE = 128; - private static final long[] REVERSE_DICT = new long[REVERSE_DICT_SIZE]; + private static final int[] REVERSE_DICT = new int[REVERSE_DICT_SIZE]; static { Arrays.fill(REVERSE_DICT, NO_SYMBOL); for (int i = 0; i < DICT.length(); i++) { // NOTE: the bit string is stored in a long[] and read from LSB to MSB // but each base64 digit is read from MSB to LSB // so they need to be reversed. - REVERSE_DICT[DICT.charAt(i)] = Long.reverse(i) >>> -BASE64_BITS; + int value = Integer.reverse(i) >>> -BASE64_BITS; + REVERSE_DICT[DICT.charAt(i)] = value; } } @@ -53,28 +54,51 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { } public BitString decode(CharSequence str) { - int length = str.length(); - int bitLength = length * BASE64_BITS; - long [] words = new long[bitLength / BitSet.BITS_PER_WORD + 1]; - int bitIndex = 0; - for (int i = 0; i < length; i++) { - char c = str.charAt(i); - long n = NO_SYMBOL; - if (c < REVERSE_DICT_SIZE) { - n = REVERSE_DICT[c]; + try { + int length = str.length(); + int bitLength = length * BASE64_BITS; + int numBlocks = length >> 2; + byte[] words = new byte[(numBlocks + 1) * 3]; + int limit = numBlocks << 2; + int dst = 0; + int src = 0; + while (src < limit) { + int b1 = REVERSE_DICT[str.charAt(src++)]; + int b2 = REVERSE_DICT[str.charAt(src++)]; + int b3 = REVERSE_DICT[str.charAt(src++)]; + int b4 = REVERSE_DICT[str.charAt(src++)]; + if ((b1 | b2 | b3 | b4) < 0) { + throw new DecodingException("Undecodable Base64URL string"); + } + int bits0 = b4 << 18 | b3 << 12 | b2 << 6 | b1; + words[dst++] = (byte)(bits0); + words[dst++] = (byte)(bits0 >> 8); + words[dst++] = (byte)(bits0 >> 16); } - if (n == NO_SYMBOL) { - throw new DecodingException("Undecodable Base64URL string"); + if (length > limit) { + remainder(str, words, length, src, dst); } - int wordIndex = BitSet.wordIndex(bitIndex); - words[wordIndex] |= (n << bitIndex); - int nextBitIndex = bitIndex + BASE64_BITS; - int nextWordIndex = BitSet.wordIndex(nextBitIndex); - if(wordIndex != nextWordIndex) { - words[nextWordIndex] = n >>> (BitSet.BITS_PER_WORD - bitIndex); - } - bitIndex = nextBitIndex; + return new BitString(new BitSet(words), bitLength); + } catch (ArrayIndexOutOfBoundsException e) { + throw new DecodingException("Undecodable Base64URL string"); + } + } + + private static final void remainder(CharSequence str, byte[] words, int length, int src, int dst) { + int b1 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; + src++; + int b2 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; + src++; + int b3 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; + src++; + int b4 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; + src++; + if ((b1 | b2 | b3 | b4) < 0) { + throw new DecodingException("Undecodable Base64URL string"); } - return new BitString(new BitSet(words), bitLength); + int bits0 = b4 << 18 | b3 << 12 | b2 << 6 | b1; + words[dst++] = (byte)(bits0); + words[dst++] = (byte)(bits0 >> 8); + words[dst++] = (byte)(bits0 >> 16); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 09242b3f..cdc65ccd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,29 +1,32 @@ package com.iab.gpp.encoder.bitstring; import java.util.Arrays; +import java.util.Base64; +import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; // a thin version of java.util.BitSet public final class BitSet { - private static final int ADDRESS_BITS_PER_WORD = 6; + private static final int ADDRESS_BITS_PER_WORD = 3; public static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; /* Used to shift left or right for a partial word mask */ - private static final long WORD_MASK = 0xffffffffffffffffL; + private static final int WORD_MASK = 0xffffffff; - private long[] words; + private byte[] words; - public BitSet(long[] words) { + public BitSet(byte[] words) { this.words = words; } public BitSet(int initialCapacity) { - this(new long[wordIndex(initialCapacity) + 1]); + this(new byte[wordIndex(initialCapacity) + 1]); } public BitSet() { - this(new long[0]); + this(new byte[0]); } public static int wordIndex(int index) { @@ -33,8 +36,8 @@ public static int wordIndex(int index) { return index >> ADDRESS_BITS_PER_WORD; } - private long[] ensureIndex(int wordIndex) { - long[] words = this.words; + private byte[] ensureIndex(int wordIndex) { + byte[] words = this.words; int wordsUsed = words.length; if (wordIndex >= wordsUsed) { int request = Math.max(2 * wordsUsed, wordIndex + 1); @@ -44,11 +47,12 @@ private long[] ensureIndex(int wordIndex) { return words; } - public boolean get(int index) { - int wordIndex = wordIndex(index); - long[] words = this.words; + public boolean get(int bitIndex) { + int wordIndex = wordIndex(bitIndex); + byte[] words = this.words; + int bit = bitIndex % BITS_PER_WORD; return (wordIndex < words.length) - && ((words[wordIndex] & (1L << index)) != 0); + && ((words[wordIndex] >>> bit) & 1) == 1; } public void clear(int from, int to) { @@ -59,25 +63,27 @@ public void clear(int from, int to) { public void clear(int bitIndex) { int wordIndex = wordIndex(bitIndex); - long[] words = this.words; + byte[] words = this.words; if (wordIndex < words.length) { - words[wordIndex] &= ~(1L << bitIndex); + int bit = bitIndex % BITS_PER_WORD; + words[wordIndex] &= ~(1 << bit); } } public int nextSetBit(int fromIndex) { - long[] words = this.words; + byte[] words = this.words; int wordsInUse = words.length; int u = wordIndex(fromIndex); if (u >= wordsInUse) { return -1; } - long word = words[u] & (WORD_MASK << fromIndex); + int bit = fromIndex % BITS_PER_WORD; + int word = words[u] & (WORD_MASK << bit); while (true) { if (word != 0) { - return (u * BITS_PER_WORD) + Long.numberOfTrailingZeros(word); + return (u * BITS_PER_WORD) + Integer.numberOfTrailingZeros(word); } if (++u == wordsInUse) { return -1; @@ -94,7 +100,8 @@ public void set(int from, int to) { public void set(int bitIndex) { int wordIndex = wordIndex(bitIndex); - long[] words = ensureIndex(wordIndex); - words[wordIndex] |= (1L << bitIndex); + byte[] words = ensureIndex(wordIndex); + int bit = bitIndex % BITS_PER_WORD; + words[wordIndex] |= (1 << bit); } } From 5c1d47393856dc6363c6020244a783f825cb706a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 14:38:27 -0500 Subject: [PATCH 092/146] add base 64 test --- .../TraditionalBase64UrlEncoderTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index 52a02e9c..a4fb89dc 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -25,5 +25,23 @@ public void testDecode2() { public void testDecode3() { Assertions.assertEquals("000011000001000000000001100011110000000000000000", base64UrlEncoder.decode("DBABjwAA").toString()); } + + @Test + public void testDifferingLengthDecodes() { + for (int length = 0; length < 1000; length++) { + StringBuilder in = new StringBuilder(); + StringBuilder out = new StringBuilder(); + for (int i = 0; i < length; i++) { + if (i % 2 == 0) { + in.append('u'); + out.append("101110"); + } else { + in.append('d'); + out.append("011101"); + } + } + Assertions.assertEquals(out.toString(), base64UrlEncoder.decode(in.toString()).toString()); + } + } } From e09b30ebc5c40f2047caee34012abb1e92fd28d8 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 21:42:27 -0500 Subject: [PATCH 093/146] clean up maven configuration --- iabgpp-encoder/pom.xml | 13 ++++++++----- iabgpp-extras-jackson/pom.xml | 13 ++++++++----- iabgpp-extras/pom.xml | 13 ++++++++----- pom.xml | 36 +++++++++++++++++++++++++++-------- 4 files changed, 52 insertions(+), 23 deletions(-) diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index 07caf281..0592e79a 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -26,7 +26,14 @@ maven-surefire-plugin - 2.22.2 + + + org.apache.maven.plugins + maven-javadoc-plugin + + + com.diffplug.spotless + spotless-maven-plugin @@ -40,10 +47,6 @@ org.apache.maven.plugins maven-source-plugin - - org.apache.maven.plugins - maven-javadoc-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index b62612ba..ac1a1a3f 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -45,7 +45,14 @@ maven-surefire-plugin - 2.22.2 + + + org.apache.maven.plugins + maven-javadoc-plugin + + + com.diffplug.spotless + spotless-maven-plugin @@ -59,10 +66,6 @@ org.apache.maven.plugins maven-source-plugin - - org.apache.maven.plugins - maven-javadoc-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index b14f682e..6673191a 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -17,7 +17,14 @@ maven-surefire-plugin - 2.22.2 + + + org.apache.maven.plugins + maven-javadoc-plugin + + + com.diffplug.spotless + spotless-maven-plugin @@ -31,10 +38,6 @@ org.apache.maven.plugins maven-source-plugin - - org.apache.maven.plugins - maven-javadoc-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/pom.xml b/pom.xml index b79ba53c..7c1921bb 100644 --- a/pom.xml +++ b/pom.xml @@ -62,6 +62,31 @@ + + maven-surefire-plugin + 2.22.2 + + + com.diffplug.spotless + spotless-maven-plugin + 3.2.1 + + + + 1.33.0 + + + + + + + + check + + verify + + + org.apache.maven.plugins maven-source-plugin @@ -80,6 +105,9 @@ org.apache.maven.plugins maven-javadoc-plugin 3.3.1 + + public + attach-javadoc @@ -113,14 +141,6 @@ release - - org.apache.maven.plugins - maven-source-plugin - - - org.apache.maven.plugins - maven-javadoc-plugin - org.apache.maven.plugins maven-gpg-plugin From 7e1a12f5502183e6fb7d597b9c313132df3ec1d2 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 2 Feb 2026 18:55:33 -0500 Subject: [PATCH 094/146] use bit set for fixed list --- .../com/iab/gpp/encoder/bitstring/BitSet.java | 21 +++++-- .../iab/gpp/encoder/bitstring/BitString.java | 5 ++ .../encoder/bitstring/BitStringReader.java | 8 +++ .../datatype/EncodableFixedIntegerList.java | 2 +- .../encoder/datatype/FixedIntegerList.java | 58 +++++++++++++------ .../encoder/datatype/encoder/IntegerSet.java | 16 ++--- .../datatype/FixedIntegerListTest.java | 2 +- .../encoder/FixedIntegerListEncoderTest.java | 2 +- 8 files changed, 78 insertions(+), 36 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index cdc65ccd..3baab5e1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,14 +1,12 @@ package com.iab.gpp.encoder.bitstring; import java.util.Arrays; -import java.util.Base64; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; // a thin version of java.util.BitSet public final class BitSet { + private static final byte[] EMPTY = new byte[0]; private static final int ADDRESS_BITS_PER_WORD = 3; public static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; @@ -26,7 +24,7 @@ public BitSet(int initialCapacity) { } public BitSet() { - this(new byte[0]); + this(EMPTY); } public static int wordIndex(int index) { @@ -104,4 +102,19 @@ public void set(int bitIndex) { int bit = bitIndex % BITS_PER_WORD; words[wordIndex] |= (1 << bit); } + + public boolean set(int bitIndex, boolean value) { + int wordIndex = wordIndex(bitIndex); + byte[] words = ensureIndex(wordIndex); + int bit = bitIndex % BITS_PER_WORD; + boolean prior = ((words[wordIndex] >>> bit) & 1) == 1; + if (prior != value) { + if (value) { + words[wordIndex] |= (1 << bit); + } else { + words[wordIndex] &= ~(1 << bit); + } + } + return prior; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index f5cbe555..499b779b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.bitstring; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -37,6 +38,10 @@ public IntegerSet toIntegerSet(int from, int to) { return new IntegerSet(bitSet, from, to, 1); } + public FixedIntegerList toFixedIntegerList(int from, int elementSize, int size) { + return new FixedIntegerList(bitSet, from, elementSize, size); + } + @Override public String toString() { StringBuilder sb = new StringBuilder(length()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java index 634941ed..5a1f92ce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.bitstring; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; @@ -59,4 +60,11 @@ public IntegerSet readIntegerSet(int length) { return out; } + public FixedIntegerList readFixedIntegerList(int elementLength, int length) { + int newOffset = offset + elementLength * length; + FixedIntegerList out = bitString.toFixedIntegerList(offset, elementLength, length); + offset = newOffset; + return out; + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 9f8947ac..5f7681d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -17,7 +17,7 @@ public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { super(true); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; - super.setValue(new FixedIntegerList(numElements), false); + super.setValue(new FixedIntegerList(elementBitStringLength, numElements), false); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index 9e6176e4..ec917964 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -1,7 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.AbstractList; -import java.util.Arrays; +import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; /** @@ -11,15 +11,25 @@ public final class FixedIntegerList extends AbstractList implements Dirtyable { private boolean dirty; - private final byte[] array; + private final BitSet bitSet; + private final int offset; + private final int elementBitStringLength; + private final int numElements; - public FixedIntegerList(int size) { - this.array = new byte[size]; + public FixedIntegerList(BitSet bitSet, int offset, int elementBitStringLength, int numElements) { + this.bitSet = bitSet; + this.offset = offset; + this.elementBitStringLength = elementBitStringLength; + this.numElements = numElements; + } + + public FixedIntegerList(int elementBitStringLength, int numElements) { + this(new BitSet(elementBitStringLength * numElements), 0, elementBitStringLength, numElements); } @Override public int size() { - return array.length; + return numElements; } @Override @@ -28,7 +38,18 @@ public Integer get(int index) { } public int getInt(int index) { - return array[index]; + int length = elementBitStringLength; + int mask = 1 << length; + int from = offset + index * length; + int to = from + length; + int value = 0; + for (int i = from; i < to; i++) { + mask >>= 1; + if (bitSet.get(i)) { + value |= mask; + } + } + return value; } @Override @@ -37,19 +58,22 @@ public Integer set(int index, Integer value) { } public int setInt(int index, int value) { - // NOTE: int 128 is prevented since it would get turned into byte -128 - if(value < 0 || value >= 128) { - throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 128."); + int length = elementBitStringLength; + int mask = 1 << length; + if (value < 0 || value >= mask) { + throw new IllegalArgumentException( + "Numeric value '" + value + "' is too large for a bit string length of '" + elementBitStringLength + "'"); + } + int from = offset + index * length; + int to = from + length; + for (int i = from; i < to; i++) { + mask >>= 1; + if (bitSet.set(i, (value & mask) > 0)) { + value |= mask; + } } - int prior = array[index]; - array[index] = (byte) value; dirty = true; - return prior; - } - - @Override - public String toString() { - return Arrays.toString(array); + return value; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 04757d67..9e880e60 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -142,13 +142,9 @@ public boolean addInt(int value) { logOutOfRange(value); return false; } - boolean present = bitSet.get(offset); - if (present) { - return false; - } - bitSet.set(offset); + boolean present = !bitSet.set(offset, true); dirty = true; - return true; + return present; } public boolean removeInt(int value) { @@ -157,13 +153,9 @@ public boolean removeInt(int value) { logOutOfRange(value); return false; } - boolean present = bitSet.get(offset); - if (!present) { - return false; - } - bitSet.clear(offset); + boolean present = bitSet.set(offset, false); dirty = true; - return true; + return present; } @Override diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java index 6aee9b3e..69b27b10 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java @@ -8,7 +8,7 @@ class FixedIntegerListTest { @Test void test() { - FixedIntegerList list = new FixedIntegerList(5); + FixedIntegerList list = new FixedIntegerList(6, 5); assertFalse(list.isDirty()); list.set(0, 2); list.set(1, 1); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 2144dbe5..f2868afe 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -152,7 +152,7 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - FixedIntegerList out = new FixedIntegerList(2); + FixedIntegerList out = new FixedIntegerList(2, 2); FixedIntegerListEncoder.decode(out, new BitStringReader(BitString.of(str)), 2); return out; } From dcd562febf5a85dc4bd8dc3a1f6c928a929ba7e2 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 2 Feb 2026 20:00:21 -0500 Subject: [PATCH 095/146] lazy init of collections when decode does slices --- .../AbstractDirtyableBitStringDataType.java | 6 ++++-- .../AbstractEncodableBitStringDataType.java | 7 +++++++ .../EncodableFibonacciIntegerRange.java | 15 +++++++++----- .../datatype/EncodableFixedBitfield.java | 15 +++++++++----- .../datatype/EncodableFixedIntegerList.java | 20 ++++++++++++------- .../datatype/EncodableFixedIntegerRange.java | 15 +++++++++----- .../datatype/EncodableFlexibleBitfield.java | 15 +++++++++----- .../EncodableOptimizedFixedRange.java | 15 +++++++++----- 8 files changed, 74 insertions(+), 34 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index cf2abaa6..6c6adcb4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -13,12 +13,14 @@ protected AbstractDirtyableBitStringDataType(boolean hardFailIfMissing) { @Override public boolean isDirty() { - return super.isDirty() || value.isDirty(); + return super.isDirty() || (value != null && value.isDirty()); } @Override public void setDirty(boolean dirty) { super.setDirty(dirty); - value.setDirty(dirty); + if (value != null) { + value.setDirty(dirty); + } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index fe7f9842..cb0945b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -27,9 +27,16 @@ public final boolean hasValue() { } public final T getValue() { + if (this.value == null) { + this.value = getDefaultValue(); + } return this.value; } + protected T getDefaultValue() { + return null; + } + public void setValue(Object value) { setValue(value, true); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 1251b8b4..e5646434 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -12,12 +12,16 @@ public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitSt public EncodableFibonacciIntegerRange() { super(true); - this.value = new IntegerSet(); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(); } public void encode(BitStringBuilder builder) { try { - FibonacciIntegerRangeEncoder.encode(builder, this.value); + FibonacciIntegerRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { throw new EncodingException(e); } @@ -33,8 +37,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index af670eb5..495f6e38 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -15,12 +15,16 @@ public final class EncodableFixedBitfield extends AbstractDirtyableBitStringData public EncodableFixedBitfield(int numElements) { super(true); this.numElements = numElements; - this.value = new IntegerSet(numElements); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(numElements); } public void encode(BitStringBuilder builder) { try { - FixedBitfieldEncoder.encode(builder, this.value, this.numElements); + FixedBitfieldEncoder.encode(builder, this.getValue(), this.numElements); } catch (Exception e) { throw new EncodingException(e); } @@ -36,8 +40,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 5f7681d6..7e249edf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -17,12 +18,16 @@ public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { super(true); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; - super.setValue(new FixedIntegerList(elementBitStringLength, numElements), false); + } + + @Override + protected FixedIntegerList getDefaultValue() { + return new FixedIntegerList(elementBitStringLength, numElements); } public void encode(BitStringBuilder builder) { try { - FixedIntegerListEncoder.encode(builder, this.value, this.elementBitStringLength, this.numElements); + FixedIntegerListEncoder.encode(builder, this.getValue(), this.elementBitStringLength, this.numElements); } catch (Exception e) { throw new EncodingException(e); } @@ -30,7 +35,7 @@ public void encode(BitStringBuilder builder) { public void decode(BitStringReader reader) { try { - FixedIntegerListEncoder.decode(this.value, reader, this.elementBitStringLength); + FixedIntegerListEncoder.decode(this.getValue(), reader, this.elementBitStringLength); } catch (Exception e) { throw new DecodingException(e); } @@ -38,13 +43,14 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - List list = (List) value; + public void setValue(Object newValue) { + FixedIntegerList value = this.getValue(); + List list = (List) newValue; int size = list.size(); for (int i = 0; i < numElements; i++) { - this.value.set(i, i < size ? list.get(i) : 0); + value.set(i, i < size ? list.get(i) : 0); } // call validator - super.setValue(this.value); + super.setValue(value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 01411792..c9b523a4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -12,12 +12,16 @@ public final class EncodableFixedIntegerRange extends AbstractDirtyableBitString protected EncodableFixedIntegerRange() { super(true); - this.value = new IntegerSet(); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(); } public void encode(BitStringBuilder builder) { try { - FixedIntegerRangeEncoder.encode(builder, this.value); + FixedIntegerRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { throw new EncodingException(e); } @@ -33,8 +37,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 7b983090..a47a5553 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -17,12 +17,16 @@ public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringD public EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { super(true); this.getLengthSupplier = getLengthSupplier; - this.value = new IntegerSet(); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(); } public void encode(BitStringBuilder builder) { try { - FixedBitfieldEncoder.encode(builder, this.value, this.getLengthSupplier.getAsInt()); + FixedBitfieldEncoder.encode(builder, this.getValue(), this.getLengthSupplier.getAsInt()); } catch (Exception e) { throw new EncodingException(e); } @@ -39,8 +43,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 12858d8f..db893545 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -13,12 +13,16 @@ public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStri public EncodableOptimizedFixedRange() { super(true); - this.value = new IntegerSet(); + } + + @Override + protected IntegerSet getDefaultValue() { + return new IntegerSet(); } public void encode(BitStringBuilder builder) { try { - OptimizedFixedRangeEncoder.encode(builder, this.value); + OptimizedFixedRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { throw new EncodingException(e); } @@ -34,8 +38,9 @@ public void decode(BitStringReader reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); + public void setValue(Object newValue) { + IntegerSet value = this.getValue(); + value.clear(); + value.addAll((Collection) newValue); } } From cc1ebac46f0dead59ee5aa6d35f51d2b66c78b15 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 2 Feb 2026 20:08:43 -0500 Subject: [PATCH 096/146] make tests pass --- .../java/com/iab/gpp/encoder/bitstring/BitString.java | 6 ++++++ .../gpp/encoder/datatype/EncodableFixedIntegerList.java | 3 +-- .../encoder/datatype/encoder/FixedIntegerListEncoder.java | 8 -------- .../datatype/encoder/FixedIntegerListEncoderTest.java | 7 ++++--- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 499b779b..f3831bf6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -35,10 +35,16 @@ public static final BitString of(String str) { } public IntegerSet toIntegerSet(int from, int to) { + if (to > length) { + throw new DecodingException("Bit string access out of range"); + } return new IntegerSet(bitSet, from, to, 1); } public FixedIntegerList toFixedIntegerList(int from, int elementSize, int size) { + if ((from + elementSize * size) > length) { + throw new DecodingException("Bit string access out of range"); + } return new FixedIntegerList(bitSet, from, elementSize, size); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 7e249edf..8765aa14 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -35,7 +34,7 @@ public void encode(BitStringBuilder builder) { public void decode(BitStringReader reader) { try { - FixedIntegerListEncoder.decode(this.getValue(), reader, this.elementBitStringLength); + this.value = reader.readFixedIntegerList(elementBitStringLength, numElements); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index d21dfc71..56b95ebb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -27,12 +27,4 @@ public static void encode(BitStringBuilder builder, List value, int ele } } } - - public static void decode(FixedIntegerList out, BitStringReader reader, int elementBitStringLength) - throws DecodingException { - int size = out.size(); - for (int i = 0; i < size; i++) { - out.setInt(i, reader.readInt(elementBitStringLength)); - } - } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index f2868afe..4f809d17 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -8,6 +8,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -152,9 +153,9 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - FixedIntegerList out = new FixedIntegerList(2, 2); - FixedIntegerListEncoder.decode(out, new BitStringReader(BitString.of(str)), 2); - return out; + EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2); + encodable.decode(new BitStringReader(BitString.of(str))); + return encodable.getValue(); } @Test From e0840d0f46cf681a76ffe1e36c577d2de5a94a84 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 11:58:16 -0500 Subject: [PATCH 097/146] unify bit string --- .../base64/AbstractBase64UrlEncoder.java | 8 +- .../base64/CompressedBase64UrlEncoder.java | 4 +- .../base64/TraditionalBase64UrlEncoder.java | 4 +- .../iab/gpp/encoder/bitstring/BitString.java | 127 ++++++++++++++---- .../encoder/bitstring/BitStringBuilder.java | 51 ------- .../encoder/bitstring/BitStringReader.java | 70 ---------- .../EncodableArrayOfFixedIntegerRanges.java | 8 +- .../encoder/datatype/EncodableBoolean.java | 7 +- .../encoder/datatype/EncodableDataType.java | 7 +- .../encoder/datatype/EncodableDatetime.java | 8 +- .../datatype/EncodableFibonacciInteger.java | 7 +- .../EncodableFibonacciIntegerRange.java | 7 +- .../datatype/EncodableFixedBitfield.java | 7 +- .../datatype/EncodableFixedInteger.java | 7 +- .../datatype/EncodableFixedIntegerList.java | 8 +- .../datatype/EncodableFixedIntegerRange.java | 7 +- .../datatype/EncodableFixedString.java | 7 +- .../datatype/EncodableFlexibleBitfield.java | 8 +- .../EncodableOptimizedFixedRange.java | 7 +- .../encoder/datatype/UnencodableBoolean.java | 7 +- .../datatype/encoder/BooleanEncoder.java | 3 +- .../datatype/encoder/DatetimeEncoder.java | 8 +- .../encoder/FibonacciIntegerEncoder.java | 4 +- .../encoder/FibonacciIntegerRangeEncoder.java | 11 +- .../encoder/FixedBitfieldEncoder.java | 4 +- .../datatype/encoder/FixedIntegerEncoder.java | 3 +- .../encoder/FixedIntegerListEncoder.java | 8 +- .../encoder/FixedIntegerRangeEncoder.java | 13 +- .../datatype/encoder/FixedLongEncoder.java | 3 +- .../datatype/encoder/FixedStringEncoder.java | 7 +- .../encoder/OptimizedFixedRangeEncoder.java | 9 +- .../segment/AbstractBase64Segment.java | 7 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 5 +- .../TraditionalBase64UrlEncoderTest.java | 2 - .../EncodableFixedIntegerRangeTest.java | 14 +- .../EncodableOptimizedFixedRangeTest.java | 26 ++-- .../datatype/encoder/BooleanEncoderTest.java | 13 +- .../datatype/encoder/DatetimeEncoderTest.java | 8 +- .../encoder/FibonacciIntegerEncoderTest.java | 34 +++-- .../FibonacciIntegerRangeEncoderTest.java | 32 +++-- .../encoder/FixedBitfieldEncoderTest.java | 32 +++-- .../encoder/FixedIntegerEncoderTest.java | 26 ++-- .../encoder/FixedIntegerListEncoderTest.java | 78 ++++++----- .../encoder/FixedIntegerRangeEncoderTest.java | 40 +++--- .../encoder/FixedLongEncoderTest.java | 30 ++--- .../encoder/FixedStringEncoderTest.java | 14 +- 46 files changed, 350 insertions(+), 450 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 39a29ac0..8dfa2d73 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -3,14 +3,13 @@ import java.util.Arrays; import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public abstract class AbstractBase64UrlEncoder { - protected abstract void pad(BitStringBuilder bitString); + protected abstract void pad(BitString bitString); private static final int BASE64_BITS = 6; private static final int NO_SYMBOL = -1; @@ -32,9 +31,8 @@ public abstract class AbstractBase64UrlEncoder { } } - public StringBuilder encode(BitStringBuilder bitStringBuilder) { - pad(bitStringBuilder); - BitString bitString = bitStringBuilder.build(); + public StringBuilder encode(BitString bitString) { + pad(bitString); int length = bitString.length(); StringBuilder str = new StringBuilder(length / BASE64_BITS); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index f94ceb3a..c890b722 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.base64; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitString; public final class CompressedBase64UrlEncoder extends AbstractBase64UrlEncoder { @@ -15,7 +15,7 @@ public static CompressedBase64UrlEncoder getInstance() { } @Override - protected void pad(BitStringBuilder bitString) { + protected void pad(BitString bitString) { int remainder = bitString.length() % 8; if(remainder > 0) { int padding = 8 - remainder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index 43c8e866..043d5bb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.base64; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitString; public final class TraditionalBase64UrlEncoder extends AbstractBase64UrlEncoder { @@ -15,7 +15,7 @@ public static TraditionalBase64UrlEncoder getInstance() { } @Override - protected void pad(BitStringBuilder bitString) { + protected void pad(BitString bitString) { int remainder = bitString.length() % 24; if (remainder > 0) { int padding = 24 - remainder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index f3831bf6..c18da6c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,6 +1,9 @@ package com.iab.gpp.encoder.bitstring; import com.iab.gpp.encoder.datatype.FixedIntegerList; +import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -11,61 +14,139 @@ public final class BitString { public static final String FALSE_STRING = new String(new char[] {FALSE}); private final BitSet bitSet; - private final int length; + private int readIndex; + private int writeIndex; public BitString(BitSet bitSet, int length) { this.bitSet = bitSet; - this.length = length; + this.writeIndex = length; + } + + public BitString() { + this(new BitSet(), 0); } public static final BitString of(String str) { int length = str.length(); - BitStringBuilder builder = new BitStringBuilder(length); + + BitString out = new BitString(new BitSet(length), 0); for (int i = 0; i < length; i++) { char c = str.charAt(i); if (c == TRUE) { - builder.append(true); + out.append(true); } else if (c == FALSE) { - builder.append(false); + out.append(false); } else { throw new DecodingException("Invalid bit string"); } } - return builder.build(); - } - - public IntegerSet toIntegerSet(int from, int to) { - if (to > length) { - throw new DecodingException("Bit string access out of range"); - } - return new IntegerSet(bitSet, from, to, 1); - } - - public FixedIntegerList toFixedIntegerList(int from, int elementSize, int size) { - if ((from + elementSize * size) > length) { - throw new DecodingException("Bit string access out of range"); - } - return new FixedIntegerList(bitSet, from, elementSize, size); + return out; } @Override public String toString() { StringBuilder sb = new StringBuilder(length()); - for (int i = 0; i < length; i++) { + for (int i = 0; i < writeIndex; i++) { sb.append(bitSet.get(i) ? TRUE : FALSE); } return sb.toString(); } public boolean getValue(int i) { - if (i >= length) { + if (i >= writeIndex) { throw new DecodingException("Bit string access out of range"); } return bitSet.get(i); } public int length() { - return length; + return writeIndex; + } + + + public BitString extend(int length) { + this.writeIndex += length; + return this; + } + + public BitString append(boolean value) { + int idx = writeIndex++; + if (value) { + bitSet.set(idx); + } + return this; + } + + public BitString append(BitString other, int from, int to) { + for (int i = from; i < to; i++) { + append(other.getValue(i)); + } + return this; + } + + public BitString append(BitString other) { + int otherLength = other.length(); + for (int i = 0; i < otherLength; i++) { + append(other.bitSet.get(i)); + } + return this; + } + + public int readInt(int length) { + int newReadIndex = readIndex + length; + int out = FixedIntegerEncoder.decode(this, readIndex, newReadIndex); + readIndex = newReadIndex; + return out; + } + + public long readLong(int length) { + int newReadIndex = readIndex + length; + long out = FixedLongEncoder.decode(this, readIndex, newReadIndex); + readIndex = newReadIndex; + return out; + } + + public boolean readBool() { + return getValue(readIndex++); + } + + public int readFibonacci() { + int value = 0; + int readIndex = this.readIndex; + for (int i = 0; i < FibonacciIntegerEncoder.FIBONACCI_LIMIT; i++) { + if (getValue(readIndex + i)) { + // 1X + value += FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]; + i++; + int next = readIndex + i; + if (getValue(next)) { + // 11 + this.readIndex = next + 1; + return value; + } + } + } + throw new DecodingException("Invalid FibonacciInteger"); + } + + public IntegerSet readIntegerSet(int length) { + int newReadIndex = readIndex + length; + if (newReadIndex > writeIndex) { + throw new DecodingException("Bit string access out of range"); + } + IntegerSet out = new IntegerSet(bitSet, readIndex, newReadIndex, 1); + readIndex = newReadIndex; + return out; + } + + public FixedIntegerList readFixedIntegerList(int elementLength, int length) { + int newReadIndex = readIndex + elementLength * length; + if (newReadIndex > writeIndex) { + throw new DecodingException("Bit string access out of range"); + } + FixedIntegerList out = new FixedIntegerList(bitSet, readIndex, elementLength, length); + readIndex = newReadIndex; + return out; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java deleted file mode 100644 index dc42e85b..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.iab.gpp.encoder.bitstring; - - -public final class BitStringBuilder { - private final BitSet bitSet; - private int length; - - public BitStringBuilder(int initialCapacity) { - this.bitSet = new BitSet(initialCapacity); - } - - public BitStringBuilder() { - this.bitSet = new BitSet(); - } - - public BitString build() { - return new BitString(bitSet, length); - } - - public BitStringBuilder extend(int length) { - this.length += length; - return this; - } - - public BitStringBuilder append(boolean value) { - int idx = length++; - if (value) { - bitSet.set(idx); - } - return this; - } - - public BitStringBuilder append(BitString other, int from, int to) { - for (int i = from; i < to; i++) { - append(other.getValue(i)); - } - return this; - } - - public int length() { - return length; - } - - public BitStringBuilder append(BitStringBuilder other) { - int otherLength = other.length(); - for (int i = 0; i < otherLength; i++) { - append(other.bitSet.get(i)); - } - return this; - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java deleted file mode 100644 index 5a1f92ce..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.iab.gpp.encoder.bitstring; - -import com.iab.gpp.encoder.datatype.FixedIntegerList; -import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.error.DecodingException; - -public final class BitStringReader { - - private int offset = 0; - private final BitString bitString; - - public BitStringReader(BitString bitString) { - this.bitString = bitString; - } - - public int readInt(int length) { - int newOffset = offset + length; - int out = FixedIntegerEncoder.decode(bitString, offset, newOffset); - offset = newOffset; - return out; - } - - public long readLong(int length) { - int newOffset = offset + length; - long out = FixedLongEncoder.decode(bitString, offset, newOffset); - offset = newOffset; - return out; - } - - public boolean readBool() { - return bitString.getValue(offset++); - } - - public int readFibonacci() { - int value = 0; - int offset = this.offset; - for (int i = 0; i < FibonacciIntegerEncoder.FIBONACCI_LIMIT; i++) { - if (bitString.getValue(offset + i)) { - // 1X - value += FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]; - i++; - int next = offset + i; - if (bitString.getValue(next)) { - // 11 - this.offset = next + 1; - return value; - } - } - } - throw new DecodingException("Invalid FibonacciInteger"); - } - - public IntegerSet readIntegerSet(int length) { - int newOffset = offset + length; - IntegerSet out = bitString.toIntegerSet(offset, newOffset); - offset = newOffset; - return out; - } - - public FixedIntegerList readFixedIntegerList(int elementLength, int length) { - int newOffset = offset + elementLength * length; - FixedIntegerList out = bitString.toFixedIntegerList(offset, elementLength, length); - offset = newOffset; - return out; - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index e004db1c..17553644 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.List; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; @@ -23,7 +21,7 @@ public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStr } @Override - public void encode(BitStringBuilder sb) { + public void encode(BitString sb) { try { List entries = this.value; @@ -40,7 +38,7 @@ public void encode(BitStringBuilder sb) { } @Override - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { int size = reader.readInt(12); value.clear(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index d04af67c..98149f47 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,7 +12,7 @@ public EncodableBoolean(Boolean value) { setValue(value, false); } - public void encode(BitStringBuilder builder){ + public void encode(BitString builder){ try { BooleanEncoder.encode(builder, this.value); } catch (Exception e) { @@ -21,7 +20,7 @@ public void encode(BitStringBuilder builder){ } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readBool(); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java index ea214e10..b63b410f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java @@ -1,10 +1,9 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; public abstract class EncodableDataType extends DataType { - public abstract void encode(BitStringBuilder builder); + public abstract void encode(BitString writer); - public abstract void decode(BitStringReader reader); + public abstract void decode(BitString reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index a5589e48..f55252dd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.time.Instant; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -19,7 +17,7 @@ public EncodableDatetime(Instant value) { setValue(value, false); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { DatetimeEncoder.encode(builder, this.value); } catch (Exception e) { @@ -27,7 +25,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = DatetimeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 39a9825d..4e423d38 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -22,7 +21,7 @@ public EncodableFibonacciInteger(Integer value, boolean hardFailIfMissing) { setValue(value, false); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FibonacciIntegerEncoder.encode(builder, this.value); } catch (Exception e) { @@ -30,7 +29,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readFibonacci(); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index e5646434..8f69fc2e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -1,8 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -19,7 +18,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FibonacciIntegerRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { @@ -27,7 +26,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = FibonacciIntegerRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 495f6e38..a5281426 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -1,8 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -22,7 +21,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(numElements); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedBitfieldEncoder.encode(builder, this.getValue(), this.numElements); } catch (Exception e) { @@ -30,7 +29,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readIntegerSet(this.numElements); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 12a1800a..3896c068 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -21,7 +20,7 @@ public EncodableFixedInteger(int bitStringLength, Integer value) { setValue(value, false); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedIntegerEncoder.encode(builder, this.value, this.bitStringLength); } catch (Exception e) { @@ -29,7 +28,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readInt(bitStringLength); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 8765aa14..3d5e411e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.List; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -24,7 +22,7 @@ protected FixedIntegerList getDefaultValue() { return new FixedIntegerList(elementBitStringLength, numElements); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedIntegerListEncoder.encode(builder, this.getValue(), this.elementBitStringLength, this.numElements); } catch (Exception e) { @@ -32,7 +30,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readFixedIntegerList(elementBitStringLength, numElements); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index c9b523a4..e9aac727 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -1,8 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -19,7 +18,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedIntegerRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { @@ -27,7 +26,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = FixedIntegerRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index f9606b32..740b7de7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -21,7 +20,7 @@ public EncodableFixedString(int stringLength, String value) { setValue(value, false); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedStringEncoder.encode(builder, this.value, this.stringLength); } catch (Exception e) { @@ -29,7 +28,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = FixedStringEncoder.decode(reader, this.stringLength); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index a47a5553..20b2bce9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -2,9 +2,7 @@ import java.util.Collection; import java.util.function.IntSupplier; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -24,7 +22,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { FixedBitfieldEncoder.encode(builder, this.getValue(), this.getLengthSupplier.getAsInt()); } catch (Exception e) { @@ -32,7 +30,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = reader.readIntegerSet(getLengthSupplier.getAsInt()); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index db893545..7d6ebbfe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -1,8 +1,7 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; @@ -20,7 +19,7 @@ protected IntegerSet getDefaultValue() { return new IntegerSet(); } - public void encode(BitStringBuilder builder) { + public void encode(BitString builder) { try { OptimizedFixedRangeEncoder.encode(builder, this.getValue()); } catch (Exception e) { @@ -28,7 +27,7 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { try { this.value = OptimizedFixedRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 4068bf7c..71171ecd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; public final class UnencodableBoolean extends AbstractEncodableBitStringDataType { @@ -14,11 +13,11 @@ public UnencodableBoolean(Boolean value) { setValue(value, false); } - public void encode(BitStringBuilder builder){ + public void encode(BitString builder){ // pass } - public void decode(BitStringReader reader) { + public void decode(BitString reader) { // pass } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java index 8787b4f9..c3d07392 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java @@ -1,13 +1,12 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class BooleanEncoder { private BooleanEncoder() {} - public static void encode(BitStringBuilder builder, Boolean value) { + public static void encode(BitString builder, Boolean value) { if (value == null) { throw new EncodingException("Unencodable Boolean '" + value + "'"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index ed83bb99..c7e8c764 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -1,16 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; import java.time.Instant; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoder { private DatetimeEncoder() {} - public static void encode(BitStringBuilder builder, Instant value) { + public static void encode(BitString builder, Instant value) { if (value != null) { FixedLongEncoder.encode(builder, value.toEpochMilli() / 100, 36); } else { @@ -18,7 +16,7 @@ public static void encode(BitStringBuilder builder, Instant value) { } } - public static Instant decode(BitStringReader reader) throws DecodingException { + public static Instant decode(BitString reader) throws DecodingException { return Instant.ofEpochMilli(reader.readLong(36) * 100L); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 869d287d..0e0c6579 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.EncodingException; public class FibonacciIntegerEncoder { @@ -22,7 +22,7 @@ private FibonacciIntegerEncoder() {} } } - public static void encode(BitStringBuilder builder, int value) { + public static void encode(BitString builder, int value) { int largestIndex = 0; for (int i = 0; i < FIBONACCI_LIMIT; i++) { if (value >= FIBONACCI_NUMBERS[i]) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index beef3289..81829415 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { private FibonacciIntegerRangeEncoder() {} - public static int encode(BitStringBuilder builder, Collection value) { - BitStringBuilder rangeBuilder = new BitStringBuilder(); + public static int encode(BitString builder, Collection value) { + BitString rangeBuilder = new BitString(); int groupStart = -1; int last = Integer.MIN_VALUE; int offset = 0; @@ -34,7 +33,7 @@ public static int encode(BitStringBuilder builder, Collection value) { return last; } - private static void writeGroup(BitStringBuilder builder, int groupStart, int last, int offset) { + private static void writeGroup(BitString builder, int groupStart, int last, int offset) { int base = groupStart - offset; int span = last - groupStart; if (span == 0) { @@ -47,7 +46,7 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitStringReader reader) throws DecodingException { + public static IntegerSet decode(BitString reader) throws DecodingException { int count = reader.readInt(12); IntegerSet value = new IntegerSet(); int offset = 0; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 5b5b0b3d..2f649ab0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -1,11 +1,11 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitString; public class FixedBitfieldEncoder { private FixedBitfieldEncoder() {} - public static void encode(BitStringBuilder builder, IntegerSet value, int bitStringLength) { + public static void encode(BitString builder, IntegerSet value, int bitStringLength) { for (int i = 0; i < bitStringLength; i++) { BooleanEncoder.encode(builder, value.containsInt(i)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index f130e6e3..85b0cd82 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerEncoder { private FixedIntegerEncoder() {} - public static void encode(BitStringBuilder builder, int value, int bitStringLength) { + public static void encode(BitString builder, int value, int bitStringLength) { int mask = 1 << bitStringLength; if (value >= mask) { throw new EncodingException( diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 56b95ebb..647ad51f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -1,17 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.List; - -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.datatype.FixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerListEncoder { private FixedIntegerListEncoder() {} - public static void encode(BitStringBuilder builder, List value, int elementBitStringLength, int numElements) { + public static void encode(BitString builder, List value, int elementBitStringLength, int numElements) { int length = value.size(); if (length > numElements) { throw new EncodingException("Too many values '" + value.size() + "'"); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 0b12b0ea..9016674c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { private FixedIntegerRangeEncoder() {} - public static int encode(BitStringBuilder builder, Collection value) { - BitStringBuilder rangeBuilder = new BitStringBuilder(); + public static int encode(BitString builder, Collection value) { + BitString rangeBuilder = new BitString(); int groupStart = -1; int last = Integer.MIN_VALUE; int groupCount = 0; @@ -27,12 +26,12 @@ public static int encode(BitStringBuilder builder, Collection value) { groupCount++; writeGroup(rangeBuilder, groupStart, last); } - FixedIntegerEncoder.encode(builder,groupCount, 12); + FixedIntegerEncoder.encode(builder, groupCount, 12); builder.append(rangeBuilder); return last; } - private static void writeGroup(BitStringBuilder builder, int groupStart, int last) { + private static void writeGroup(BitString builder, int groupStart, int last) { if (groupStart == last) { builder.append(false); FixedIntegerEncoder.encode(builder, groupStart, 16); @@ -43,7 +42,7 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitStringReader reader) throws DecodingException { + public static IntegerSet decode(BitString reader) throws DecodingException { int count = reader.readInt(12); IntegerSet value = new IntegerSet(); for (int i = 0; i < count; i++) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java index 9f0c6ef5..bc326030 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedLongEncoder { private FixedLongEncoder() {} - public static void encode(BitStringBuilder builder, long value, int bitStringLength) { + public static void encode(BitString builder, long value, int bitStringLength) { long mask = 1L << bitStringLength; if (value >= mask) { throw new EncodingException( diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 2b6f3cee..9587baf8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.EncodingException; public class FixedStringEncoder { private FixedStringEncoder() {} private static final char SPACE = ' '; - public static void encode(BitStringBuilder builder, String value, int stringLength) { + public static void encode(BitString builder, String value, int stringLength) { int length = value.length(); for (int i = 0; i < stringLength; i++) { int code = SPACE; @@ -25,7 +24,7 @@ public static void encode(BitStringBuilder builder, String value, int stringLeng } } - public static String decode(BitStringReader reader, int length) { + public static String decode(BitString reader, int length) { StringBuilder value = new StringBuilder(length); for (int i = 0; i < length; i++) { int code = reader.readInt(6); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index c264e91a..3a89e381 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -1,16 +1,15 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class OptimizedFixedRangeEncoder { - public static void encode(BitStringBuilder builder, IntegerSet value) throws EncodingException { + public static void encode(BitString builder, IntegerSet value) throws EncodingException { // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way // to identify in advance which will be shorter based on the array length and values - BitStringBuilder rangeBitString = new BitStringBuilder(); + BitString rangeBitString = new BitString(); int max = FixedIntegerRangeEncoder.encode(rangeBitString, value); int rangeLength = rangeBitString.length(); int bitFieldLength = max; @@ -27,7 +26,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerSet decode(BitStringReader reader) throws DecodingException { + public static IntegerSet decode(BitString reader) throws DecodingException { int size = reader.readInt(16); if (reader.readBool()) { return FixedIntegerRangeEncoder.decode(reader); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 05af6a33..16d2bd50 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -3,8 +3,6 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -23,7 +21,7 @@ protected AbstractBase64UrlEncoder getBase64UrlEncoder() { @Override protected final CharSequence doEncode() { - BitStringBuilder bitString = new BitStringBuilder(); + BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { AbstractEncodableBitStringDataType field = get(i); @@ -42,12 +40,11 @@ protected final void doDecode(CharSequence encodedString) { try { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); - BitStringReader reader = new BitStringReader(bitString); for (int i = 0; i < size; i++) { AbstractEncodableBitStringDataType field = get(i); if (field != null) { try { - field.decode(reader); + field.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index f2ee5ad3..369c25bb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; @@ -52,14 +51,14 @@ protected BitString decodeBitString(CharSequence encodedString) { // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the // DE, IA, NE, NH, NJ, TN release if (bitString.length() == 66) { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); builder.append(bitString, 0, 48); builder.extend(8); builder.append(bitString, 48, 52); builder.extend(2); builder.append(bitString, 52, 62); - bitString = builder.build(); + bitString = builder; } return bitString; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index a4fb89dc..e9821ca9 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -2,8 +2,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; public class TraditionalBase64UrlEncoderTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index 638d19da..aa179348 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -6,8 +6,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -17,31 +15,31 @@ public class EncodableFixedIntegerRangeTest { public void testEncode1() throws EncodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); encodableFixedIntegerRange.setValue(Arrays.asList(28)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableFixedIntegerRange.encode(builder); - Assertions.assertEquals("00000000000100000000000011100", builder.build().toString()); + Assertions.assertEquals("00000000000100000000000011100", builder.toString()); } @Test public void testEncode2() throws EncodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); encodableFixedIntegerRange.setValue(Arrays.asList(29)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableFixedIntegerRange.encode(builder); - Assertions.assertEquals("00000000000100000000000011101", builder.build().toString()); + Assertions.assertEquals("00000000000100000000000011101", builder.toString()); } @Test public void testDecode1() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode(new BitStringReader(BitString.of("00000000000100000000000011100"))); + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100")); Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.getValue()); } @Test public void testDecode2() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode(new BitStringReader(BitString.of("00000000000100000000000011101"))); + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101")); Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.getValue()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index d73c6e91..a0b43588 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -6,8 +6,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; public class EncodableOptimizedFixedRangeTest { @@ -16,57 +14,57 @@ public class EncodableOptimizedFixedRangeTest { @Test public void testEncode1() { encodableOptimizedFixedRange.setValue(Arrays.asList(12, 24, 48)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder); Assertions.assertEquals("00000000001100000000000000001000000000001000000000000000000000001", - builder.build().toString()); + builder.toString()); } @Test public void testEncode2() { encodableOptimizedFixedRange.setValue(Arrays.asList(18, 30)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder); - Assertions.assertEquals("00000000000111100000000000000000001000000000001", builder.build().toString()); + Assertions.assertEquals("00000000000111100000000000000000001000000000001", builder.toString()); } @Test public void testEncode3() { encodableOptimizedFixedRange.setValue(Arrays.asList(28)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder); - Assertions.assertEquals("000000000001110000000000000000000000000000001", builder.build().toString()); + Assertions.assertEquals("000000000001110000000000000000000000000000001", builder.toString()); } @Test public void testEncode4() { encodableOptimizedFixedRange.setValue(Arrays.asList(29)); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder); - Assertions.assertEquals("0000000000011101100000000000100000000000011101", builder.build().toString()); + Assertions.assertEquals("0000000000011101100000000000100000000000011101", builder.toString()); } @Test public void testDecode1() { - encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"))); + encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001")); Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode2() { - encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("00000000000111100000000000000000001000000000001"))); + encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001")); Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode3() { - encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("000000000001110000000000000000000000000000001"))); + encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001")); Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode4() { - encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("0000000000011101100000000000100000000000011101"))); + encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101")); Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.getValue()); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index 0a499084..b3fda6c2 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -4,28 +4,29 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.error.DecodingException; public class BooleanEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); BooleanEncoder.encode(builder, false); - Assertions.assertEquals("0", builder.build().toString()); + Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); BooleanEncoder.encode(builder, true); - Assertions.assertEquals("1", builder.build().toString()); + Assertions.assertEquals("1", builder.toString()); } @Test public void testDecode1() { - Assertions.assertEquals(false, BooleanEncoder.decode(BitString.of("0"))); + BitString x = BitString.of("0"); + System.out.println(x); + Assertions.assertEquals(false, BooleanEncoder.decode(x)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java index 73f74cb9..7e35100d 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java @@ -5,8 +5,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoderTest { @@ -14,10 +12,10 @@ public class DatetimeEncoderTest { @Test public void test1() throws DecodingException { Instant date1 = Instant.now(); - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); DatetimeEncoder.encode(builder, date1); - String encodedDate1 = builder.build().toString(); - Instant date2 = DatetimeEncoder.decode(new BitStringReader(BitString.of(encodedDate1))); + String encodedDate1 = builder.toString(); + Instant date2 = DatetimeEncoder.decode(BitString.of(encodedDate1)); Assertions.assertEquals((date1.toEpochMilli() / 100L) * 100L, date2.toEpochMilli()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 060a25c1..f2e5c394 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -4,8 +4,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,62 +11,62 @@ public class FibonacciIntegerEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 1); - Assertions.assertEquals("11", builder.build().toString()); + Assertions.assertEquals("11", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 2); - Assertions.assertEquals("011", builder.build().toString()); + Assertions.assertEquals("011", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 3); - Assertions.assertEquals("0011", builder.build().toString()); + Assertions.assertEquals("0011", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 4); - Assertions.assertEquals("1011", builder.build().toString()); + Assertions.assertEquals("1011", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 5); - Assertions.assertEquals("00011", builder.build().toString()); + Assertions.assertEquals("00011", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 6); - Assertions.assertEquals("10011", builder.build().toString()); + Assertions.assertEquals("10011", builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerEncoder.encode(builder, 7); - Assertions.assertEquals("01011", builder.build().toString()); + Assertions.assertEquals("01011", builder.toString()); } @Test public void testEncodeTooLarge() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); Assertions.assertThrows(EncodingException.class, () -> FibonacciIntegerEncoder.encode(builder, Integer.MAX_VALUE)); } private int decode(String str) { - return new BitStringReader(BitString.of(str)).readFibonacci(); + return BitString.of(str).readFibonacci(); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index 2c71713c..b1fa03eb 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -7,65 +7,63 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, new ArrayList<>()); - Assertions.assertEquals("000000000000", builder.build().toString()); + Assertions.assertEquals("000000000000", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2)); - Assertions.assertEquals("0000000000010011", builder.build().toString()); + Assertions.assertEquals("0000000000010011", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 3, 4, 5, 6)); - Assertions.assertEquals("00000000000110111011", builder.build().toString()); + Assertions.assertEquals("00000000000110111011", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7)); - Assertions.assertEquals("000000000010001110011011", builder.build().toString()); + Assertions.assertEquals("000000000010001110011011", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FibonacciIntegerRangeEncoder.encode(builder, set); - Assertions.assertEquals("000000000010001110011011", builder.build().toString()); + Assertions.assertEquals("000000000010001110011011", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(3, 5, 6, 7, 8)); - Assertions.assertEquals("0000000000100001110110011", builder.build().toString()); + Assertions.assertEquals("0000000000100001110110011", builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12)); - Assertions.assertEquals("00000000001000111001101011", builder.build().toString()); + Assertions.assertEquals("00000000001000111001101011", builder.toString()); } private IntegerSet decode(String str) { - return FibonacciIntegerRangeEncoder.decode(new BitStringReader(BitString.of(str))); + return FibonacciIntegerRangeEncoder.decode(BitString.of(str)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 23fdf263..65579a53 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -5,71 +5,69 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedBitfieldEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("00", builder.build().toString()); + Assertions.assertEquals("00", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 1); - Assertions.assertEquals("0", builder.build().toString()); + Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.add(0); FixedBitfieldEncoder.encode(builder, set, 1); - Assertions.assertEquals("1", builder.build().toString()); + Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("00", builder.build().toString()); + Assertions.assertEquals("00", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("01", builder.build().toString()); + Assertions.assertEquals("01", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addInt(0); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("10", builder.build().toString()); + Assertions.assertEquals("10", builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addInt(0); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); - Assertions.assertEquals("11", builder.build().toString()); + Assertions.assertEquals("11", builder.toString()); } @Test @@ -89,7 +87,7 @@ public void testEncode9() { } private IntegerSet decode(String str) { - return new BitStringReader(BitString.of(str)).readIntegerSet(str.length()); + return BitString.of(str).readIntegerSet(str.length()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index c4d75447..bde7eb8b 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -4,8 +4,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,43 +11,43 @@ public class FixedIntegerEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 0, 1); - Assertions.assertEquals("0", builder.build().toString()); + Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 0, 6); - Assertions.assertEquals("000000", builder.build().toString()); + Assertions.assertEquals("000000", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 1, 1); - Assertions.assertEquals("1", builder.build().toString()); + Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 1, 4); - Assertions.assertEquals("0001", builder.build().toString()); + Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 7, 8); - Assertions.assertEquals("00000111", builder.build().toString()); + Assertions.assertEquals("00000111", builder.toString()); } @Test public void testEncode6() { try { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { @@ -58,7 +56,7 @@ public void testEncode6() { } private int decode(String str) { - return new BitStringReader(BitString.of(str)).readInt(str.length()); + return BitString.of(str).readInt(str.length()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 4f809d17..b02f61ee 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -6,8 +6,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -17,134 +15,134 @@ public class FixedIntegerListEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, new ArrayList<>(), 2, 2); - Assertions.assertEquals("0000", builder.build().toString()); + Assertions.assertEquals("0000", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0), 2, 2); - Assertions.assertEquals("0000", builder.build().toString()); + Assertions.assertEquals("0000", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 0), 2, 2); - Assertions.assertEquals("0000", builder.build().toString()); + Assertions.assertEquals("0000", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 1), 2, 2); - Assertions.assertEquals("0001", builder.build().toString()); + Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 2), 2, 2); - Assertions.assertEquals("0010", builder.build().toString()); + Assertions.assertEquals("0010", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(0, 3), 2, 2); - Assertions.assertEquals("0011", builder.build().toString()); + Assertions.assertEquals("0011", builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 0), 2, 2); - Assertions.assertEquals("0100", builder.build().toString()); + Assertions.assertEquals("0100", builder.toString()); } @Test public void testEncode8() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 1), 2, 2); - Assertions.assertEquals("0101", builder.build().toString()); + Assertions.assertEquals("0101", builder.toString()); } @Test public void testEncode9() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 2), 2, 2); - Assertions.assertEquals("0110", builder.build().toString()); + Assertions.assertEquals("0110", builder.toString()); } @Test public void testEncode10() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(1, 3), 2, 2); - Assertions.assertEquals("0111", builder.build().toString()); + Assertions.assertEquals("0111", builder.toString()); } @Test public void testEncode11() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 0), 2, 2); - Assertions.assertEquals("1000", builder.build().toString()); + Assertions.assertEquals("1000", builder.toString()); } @Test public void testEncode12() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 1), 2, 2); - Assertions.assertEquals("1001", builder.build().toString()); + Assertions.assertEquals("1001", builder.toString()); } @Test public void testEncode13() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 2), 2, 2); - Assertions.assertEquals("1010", builder.build().toString()); + Assertions.assertEquals("1010", builder.toString()); } @Test public void testEncode14() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(2, 3), 2, 2); - Assertions.assertEquals("1011", builder.build().toString()); + Assertions.assertEquals("1011", builder.toString()); } @Test public void testEncode15() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 0), 2, 2); - Assertions.assertEquals("1100", builder.build().toString()); + Assertions.assertEquals("1100", builder.toString()); } @Test public void testEncode16() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 1), 2, 2); - Assertions.assertEquals("1101", builder.build().toString()); + Assertions.assertEquals("1101", builder.toString()); } @Test public void testEncode17() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 2), 2, 2); - Assertions.assertEquals("1110", builder.build().toString()); + Assertions.assertEquals("1110", builder.toString()); } @Test public void testEncode18() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 3), 2, 2); - Assertions.assertEquals("1111", builder.build().toString()); + Assertions.assertEquals("1111", builder.toString()); } @Test public void testEncode19() { try { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerListEncoder.encode(builder, Arrays.asList(3, 3), 1, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { @@ -154,7 +152,7 @@ public void testEncode19() { private FixedIntegerList decode(String str) { EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2); - encodable.decode(new BitStringReader(BitString.of(str))); + encodable.decode(BitString.of(str)); return encodable.getValue(); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index da47b3a5..bc9afb56 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -7,87 +7,85 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, new ArrayList<>()); - Assertions.assertEquals("000000000000", builder.build().toString()); + Assertions.assertEquals("000000000000", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2)); - Assertions.assertEquals("00000000000100000000000000010", builder.build().toString()); + Assertions.assertEquals("00000000000100000000000000010", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 3, 4, 5, 6)); Assertions.assertEquals("000000000001100000000000000100000000000000110", - builder.build().toString()); + builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7)); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - builder.build().toString()); + builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FixedIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - builder.build().toString()); + builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(3, 5, 6, 7, 8)); Assertions.assertEquals("00000000001000000000000000011100000000000001010000000000001000", - builder.build().toString()); + builder.toString()); } @Test public void testEncode7() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48)); Assertions.assertEquals("000000000011000000000000011000000000000001100000000000000110000", - builder.build().toString()); + builder.toString()); } @Test public void testEncode8() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48, 49)); Assertions.assertEquals("0000000000110000000000000110000000000000011000100000000001100000000000000110001", - builder.build().toString()); + builder.toString()); } @Test public void testEncode9() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 6, 8, 12, 18, 23, 24, 25, 37, 42)); Assertions.assertEquals( "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010", - builder.build().toString()); + builder.toString()); } private IntegerSet decode(String str) { - return FixedIntegerRangeEncoder.decode(new BitStringReader(BitString.of(str))); + return FixedIntegerRangeEncoder.decode(BitString.of(str)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index fc1fde0a..e7063ded 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -4,8 +4,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,51 +11,51 @@ public class FixedLongEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 0, 1); - Assertions.assertEquals("0", builder.build().toString()); + Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 0, 6); - Assertions.assertEquals("000000", builder.build().toString()); + Assertions.assertEquals("000000", builder.toString()); } @Test public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 1, 1); - Assertions.assertEquals("1", builder.build().toString()); + Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 1, 4); - Assertions.assertEquals("0001", builder.build().toString()); + Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 7, 8); - Assertions.assertEquals("00000111", builder.build().toString()); + Assertions.assertEquals("00000111", builder.toString()); } @Test public void testEncode6() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedLongEncoder.encode(builder, 16630898421L, 36); - Assertions.assertEquals("001111011111010001110101111011110101", builder.build().toString()); + Assertions.assertEquals("001111011111010001110101111011110101", builder.toString()); } @Test public void testEncode7() { try { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedIntegerEncoder.encode(builder, 8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { @@ -66,7 +64,7 @@ public void testEncode7() { } private long decode(String str) { - return new BitStringReader(BitString.of(str)).readLong(str.length()); + return BitString.of(str).readLong(str.length()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index 970c99bc..9a5c9340 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -4,8 +4,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -13,22 +11,22 @@ public class FixedStringEncoderTest { @Test public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedStringEncoder.encode(builder, "AB", 2); - Assertions.assertEquals("000000000001", builder.build().toString()); + Assertions.assertEquals("000000000001", builder.toString()); } @Test public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedStringEncoder.encode(builder, "a", 2); - Assertions.assertEquals("100000111111", builder.build().toString()); + Assertions.assertEquals("100000111111", builder.toString()); } @Test public void testEncode3() { try { - BitStringBuilder builder = new BitStringBuilder(); + BitString builder = new BitString(); FixedStringEncoder.encode(builder, "1", 2); Assertions.fail("DecodingException expected"); } catch (EncodingException e) { @@ -37,7 +35,7 @@ public void testEncode3() { } private String decode(String str) { - return FixedStringEncoder.decode(new BitStringReader(BitString.of(str)), str.length() / 6); + return FixedStringEncoder.decode(BitString.of(str), str.length() / 6); } @Test From 2b17dddd78b3d472196a240fef1c012a2745d60d Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 13:04:23 -0500 Subject: [PATCH 098/146] remove redundant code --- .../base64/AbstractBase64UrlEncoder.java | 10 +---- .../iab/gpp/encoder/bitstring/BitString.java | 29 +++++++++----- .../datatype/encoder/BooleanEncoder.java | 12 ------ .../datatype/encoder/FixedIntegerEncoder.java | 34 ---------------- .../datatype/encoder/FixedLongEncoder.java | 14 ------- .../datatype/encoder/BooleanEncoderTest.java | 40 ++----------------- 6 files changed, 26 insertions(+), 113 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 8dfa2d73..fba340f7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -3,7 +3,6 @@ import java.util.Arrays; import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -35,19 +34,14 @@ public StringBuilder encode(BitString bitString) { pad(bitString); int length = bitString.length(); StringBuilder str = new StringBuilder(length / BASE64_BITS); - - int index = 0; - while (index <= length - BASE64_BITS) { + while (bitString.hasRemaining()) { try { - int nextIndex = index + BASE64_BITS; - int n = FixedIntegerEncoder.decode(bitString, index, nextIndex); + int n = bitString.readInt(BASE64_BITS); str.append(DICT.charAt(n)); - index = nextIndex; } catch (DecodingException e) { throw new EncodingException("Unencodable Base64Url '" + bitString + "'"); } } - return str; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index c18da6c3..f9bbaed0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -2,8 +2,6 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -52,7 +50,7 @@ public String toString() { return sb.toString(); } - public boolean getValue(int i) { + private boolean getValue(int i) { if (i >= writeIndex) { throw new DecodingException("Bit string access out of range"); } @@ -63,6 +61,9 @@ public int length() { return writeIndex; } + public boolean hasRemaining() { + return readIndex < writeIndex; + } public BitString extend(int length) { this.writeIndex += length; @@ -93,16 +94,26 @@ public BitString append(BitString other) { } public int readInt(int length) { - int newReadIndex = readIndex + length; - int out = FixedIntegerEncoder.decode(this, readIndex, newReadIndex); - readIndex = newReadIndex; + int out = 0; + int mask = 1 << length; + for (int i = 0; i < length; i++) { + mask >>= 1; + if (readBool()) { + out |= mask; + } + } return out; } public long readLong(int length) { - int newReadIndex = readIndex + length; - long out = FixedLongEncoder.decode(this, readIndex, newReadIndex); - readIndex = newReadIndex; + long out = 0; + long mask = 1L << length; + for (int i = 0; i < length; i++) { + mask >>= 1; + if (readBool()) { + out |= mask; + } + } return out; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java index c3d07392..ee39fdcb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class BooleanEncoder { @@ -12,15 +11,4 @@ public static void encode(BitString builder, Boolean value) { } builder.append(value); } - - public static boolean decode(BitString bitString) { - return decode(bitString, 0, bitString.length()); - } - - public static boolean decode(BitString bitString, int fromIndex, int length) { - if (length != 1) { - throw new DecodingException("Undecodable Boolean '" + bitString + "'"); - } - return bitString.getValue(fromIndex); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index 85b0cd82..cf009a03 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedIntegerEncoder { @@ -18,37 +17,4 @@ public static void encode(BitString builder, int value, int bitStringLength) { builder.append((value & mask) > 0); } } - - public static int decode(BitString bitString) throws DecodingException { - return decode(bitString, 0, bitString.length()); - } - - public static int decode(BitString bitString, int from, int to) throws DecodingException { - int value = 0; - - int length = to - from; - for (int i = 0; i < length; i++) { - if (bitString.getValue(to - (i + 1))) { - value += 1 << i; - } - } - - return value; - } - - public static int decode(String bitString, int fromIndex, int length) throws DecodingException { - int value = 0; - - int base = fromIndex + length - 1; - for (int i = 0; i < length; i++) { - char c = bitString.charAt(base - i); - if (c == BitString.TRUE) { - value += 1 << i; - } else if (c != BitString.FALSE) { - throw new DecodingException("Unencodable Base64Url '" + bitString + "'"); - } - } - - return value; - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java index bc326030..05d79502 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedLongEncoder { @@ -18,17 +17,4 @@ public static void encode(BitString builder, long value, int bitStringLength) { builder.append((value & mask) > 0); } } - - public static long decode(BitString bitString, int from, int to) throws DecodingException { - long value = 0; - - int length = to - from; - for (int i = 0; i < length; i++) { - if (bitString.getValue(to - (i + 1))) { - value += 1L << i; - } - } - - return value; - } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index b3fda6c2..9e132116 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -24,20 +24,18 @@ public void testEncode2() { @Test public void testDecode1() { - BitString x = BitString.of("0"); - System.out.println(x); - Assertions.assertEquals(false, BooleanEncoder.decode(x)); + Assertions.assertEquals(false, BitString.of("0").readBool()); } @Test public void testDecode2() { - Assertions.assertEquals(true, BooleanEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(true, BitString.of("1").readBool()); } @Test public void testDecode3() { try { - BooleanEncoder.decode(BitString.of("")); + BitString.of("").readBool(); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -47,37 +45,7 @@ public void testDecode3() { @Test public void testDecode4() { try { - BooleanEncoder.decode(BitString.of("2")); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode5() { - try { - BooleanEncoder.decode(BitString.of("00")); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode6() { - try { - BooleanEncoder.decode(BitString.of("01")); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode7() { - try { - BooleanEncoder.decode(BitString.of("10")); + BitString.of("2").readBool(); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { From b78569311d0311b9c83b6a34d1a39ebe38cc5545 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 13:27:48 -0500 Subject: [PATCH 099/146] consolidate and rename read/write methods --- .../base64/CompressedBase64UrlEncoder.java | 4 +- .../base64/TraditionalBase64UrlEncoder.java | 2 +- .../iab/gpp/encoder/bitstring/BitString.java | 84 ++++++++++++++----- .../EncodableArrayOfFixedIntegerRanges.java | 7 +- .../encoder/datatype/EncodableBoolean.java | 5 +- .../datatype/EncodableFibonacciInteger.java | 3 +- .../datatype/EncodableFixedInteger.java | 3 +- .../encoder/datatype/FixedIntegerList.java | 2 +- .../datatype/encoder/BooleanEncoder.java | 14 ---- .../datatype/encoder/DatetimeEncoder.java | 4 +- .../encoder/FibonacciIntegerEncoder.java | 29 ------- .../encoder/FibonacciIntegerRangeEncoder.java | 16 ++-- .../encoder/FixedBitfieldEncoder.java | 2 +- .../datatype/encoder/FixedIntegerEncoder.java | 20 ----- .../encoder/FixedIntegerListEncoder.java | 4 +- .../encoder/FixedIntegerRangeEncoder.java | 16 ++-- .../datatype/encoder/FixedLongEncoder.java | 20 ----- .../datatype/encoder/FixedStringEncoder.java | 4 +- .../encoder/OptimizedFixedRangeEncoder.java | 13 +-- .../gpp/encoder/segment/UsNatCoreSegment.java | 10 +-- .../datatype/encoder/BooleanEncoderTest.java | 12 +-- .../encoder/FibonacciIntegerEncoderTest.java | 16 ++-- .../encoder/FixedIntegerEncoderTest.java | 12 +-- .../encoder/FixedLongEncoderTest.java | 14 ++-- 24 files changed, 138 insertions(+), 178 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index c890b722..b4527851 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -20,7 +20,7 @@ protected void pad(BitString bitString) { if(remainder > 0) { int padding = 8 - remainder; for (int i = 0; i < padding; i++) { - bitString.append(false); + bitString.writeBoolean(false); } } @@ -28,7 +28,7 @@ protected void pad(BitString bitString) { if(remainder > 0) { int padding = 6 - remainder; for (int i = 0; i < padding; i++) { - bitString.append(false); + bitString.writeBoolean(false); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index 043d5bb1..d26e71cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -20,7 +20,7 @@ protected void pad(BitString bitString) { if (remainder > 0) { int padding = 24 - remainder; for (int i = 0; i < padding; i++) { - bitString.append(false); + bitString.writeBoolean(false); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index f9bbaed0..00d20809 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; public final class BitString { public static final char TRUE = '1'; @@ -26,14 +27,13 @@ public BitString() { public static final BitString of(String str) { int length = str.length(); - BitString out = new BitString(new BitSet(length), 0); for (int i = 0; i < length; i++) { char c = str.charAt(i); if (c == TRUE) { - out.append(true); + out.writeBoolean(true); } else if (c == FALSE) { - out.append(false); + out.writeBoolean(false); } else { throw new DecodingException("Invalid bit string"); } @@ -60,45 +60,91 @@ private boolean getValue(int i) { public int length() { return writeIndex; } - + public boolean hasRemaining() { return readIndex < writeIndex; } - - public BitString extend(int length) { + + public void writeEmpty(int length) { this.writeIndex += length; - return this; } - public BitString append(boolean value) { + public void writeInt(int value, int length) { + int mask = 1 << length; + if (value >= mask) { + throw new EncodingException( + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + } + for (int i = 0; i < length; i++) { + mask >>= 1; + writeBoolean((mask & value) != 0); + } + } + + public void writeLong(long value, int length) { + long mask = 1L << length; + if (value >= mask) { + throw new EncodingException( + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + } + for (int i = 0; i < length; i++) { + mask >>= 1; + writeBoolean((mask & value) != 0); + } + } + + public void writeBoolean(boolean value) { int idx = writeIndex++; if (value) { bitSet.set(idx); } - return this; } - public BitString append(BitString other, int from, int to) { + public void writeFibonacci(int value) { + int largestIndex = 0; + for (int i = 0; i < FibonacciIntegerEncoder.FIBONACCI_LIMIT; i++) { + if (value >= FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]) { + largestIndex++; + } else { + break; + } + } + if (largestIndex == FibonacciIntegerEncoder.FIBONACCI_LIMIT) { + throw new EncodingException("Unencodable FibonacciInteger " + value); + } + + int out = 1; + int mask = 1; + for (int i = largestIndex - 1; i >= 0; i--) { + mask <<= 1; + int f = FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]; + if (value >= f) { + out |= mask; + value -= f; + } + } + writeInt(out, largestIndex + 1); + } + + public void write(BitString other, int from, int to) { for (int i = from; i < to; i++) { - append(other.getValue(i)); + writeBoolean(other.getValue(i)); } - return this; } - public BitString append(BitString other) { + public void write(BitString other) { int otherLength = other.length(); for (int i = 0; i < otherLength; i++) { - append(other.bitSet.get(i)); + writeBoolean(other.bitSet.get(i)); } - return this; } - + public int readInt(int length) { int out = 0; int mask = 1 << length; for (int i = 0; i < length; i++) { mask >>= 1; - if (readBool()) { + if (readBoolean()) { out |= mask; } } @@ -110,14 +156,14 @@ public long readLong(int length) { long mask = 1L << length; for (int i = 0; i < length; i++) { mask >>= 1; - if (readBool()) { + if (readBoolean()) { out |= mask; } } return out; } - public boolean readBool() { + public boolean readBoolean() { return getValue(readIndex++); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 17553644..b0ed304a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -2,7 +2,6 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -25,10 +24,10 @@ public void encode(BitString sb) { try { List entries = this.value; - FixedIntegerEncoder.encode(sb, entries.size(), 12); + sb.writeInt(entries.size(), 12); for (RangeEntry entry : entries) { - FixedIntegerEncoder.encode(sb, entry.getKey(), keyBitStringLength); - FixedIntegerEncoder.encode(sb, entry.getType(), typeBitStringLength); + sb.writeInt(entry.getKey(), keyBitStringLength); + sb.writeInt(entry.getType(), typeBitStringLength); FixedIntegerRangeEncoder.encode(sb, entry.getIds()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 98149f47..1bfa4f19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -14,7 +13,7 @@ public EncodableBoolean(Boolean value) { public void encode(BitString builder){ try { - BooleanEncoder.encode(builder, this.value); + builder.writeBoolean(this.value); } catch (Exception e) { throw new EncodingException(e); } @@ -22,7 +21,7 @@ public void encode(BitString builder){ public void decode(BitString reader) { try { - this.value = reader.readBool(); + this.value = reader.readBoolean(); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 4e423d38..f4dacdb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -23,7 +22,7 @@ public EncodableFibonacciInteger(Integer value, boolean hardFailIfMissing) { public void encode(BitString builder) { try { - FibonacciIntegerEncoder.encode(builder, this.value); + builder.writeFibonacci(this.value); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 3896c068..c7c3c87a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -22,7 +21,7 @@ public EncodableFixedInteger(int bitStringLength, Integer value) { public void encode(BitString builder) { try { - FixedIntegerEncoder.encode(builder, this.value, this.bitStringLength); + builder.writeInt(this.value, this.bitStringLength); } catch (Exception e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index ec917964..9c49bc50 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -68,7 +68,7 @@ public int setInt(int index, int value) { int to = from + length; for (int i = from; i < to; i++) { mask >>= 1; - if (bitSet.set(i, (value & mask) > 0)) { + if (bitSet.set(i, (value & mask) != 0)) { value |= mask; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java deleted file mode 100644 index ee39fdcb..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.EncodingException; - -public class BooleanEncoder { - private BooleanEncoder() {} - public static void encode(BitString builder, Boolean value) { - if (value == null) { - throw new EncodingException("Unencodable Boolean '" + value + "'"); - } - builder.append(value); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index c7e8c764..b8a741b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -10,9 +10,9 @@ private DatetimeEncoder() {} public static void encode(BitString builder, Instant value) { if (value != null) { - FixedLongEncoder.encode(builder, value.toEpochMilli() / 100, 36); + builder.writeLong(value.toEpochMilli() / 100, 36); } else { - FixedLongEncoder.encode(builder, 0, 36); + builder.writeLong(0, 36); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 0e0c6579..d83c35f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.EncodingException; - public class FibonacciIntegerEncoder { private FibonacciIntegerEncoder() {} @@ -21,30 +18,4 @@ private FibonacciIntegerEncoder() {} } } } - - public static void encode(BitString builder, int value) { - int largestIndex = 0; - for (int i = 0; i < FIBONACCI_LIMIT; i++) { - if (value >= FIBONACCI_NUMBERS[i]) { - largestIndex++; - } else { - break; - } - } - if (largestIndex == FIBONACCI_LIMIT) { - throw new EncodingException("Unencodable FibonacciInteger " + value); - } - - int out = 1; - int mask = 1; - for (int i = largestIndex - 1; i >= 0; i--) { - mask <<= 1; - int f = FIBONACCI_NUMBERS[i]; - if (value >= f) { - out |= mask; - value -= f; - } - } - FixedIntegerEncoder.encode(builder, out, largestIndex + 1); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 81829415..addce7a1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -28,8 +28,8 @@ public static int encode(BitString builder, Collection value) { groupCount++; writeGroup(rangeBuilder, groupStart, last, offset); } - FixedIntegerEncoder.encode(builder,groupCount, 12); - builder.append(rangeBuilder); + builder.writeInt(groupCount, 12); + builder.write(rangeBuilder); return last; } @@ -37,12 +37,12 @@ private static void writeGroup(BitString builder, int groupStart, int last, int int base = groupStart - offset; int span = last - groupStart; if (span == 0) { - builder.append(false); - FibonacciIntegerEncoder.encode(builder, base); + builder.writeBoolean(false); + builder.writeFibonacci(base); } else { - builder.append(true); - FibonacciIntegerEncoder.encode(builder, base); - FibonacciIntegerEncoder.encode(builder, span); + builder.writeBoolean(true); + builder.writeFibonacci(base); + builder.writeFibonacci(span); } } @@ -51,7 +51,7 @@ public static IntegerSet decode(BitString reader) throws DecodingException { IntegerSet value = new IntegerSet(); int offset = 0; for (int i = 0; i < count; i++) { - boolean group = reader.readBool(); + boolean group = reader.readBoolean(); if (group) { int start = reader.readFibonacci() + offset; offset = start; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 2f649ab0..c65a864a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -7,7 +7,7 @@ private FixedBitfieldEncoder() {} public static void encode(BitString builder, IntegerSet value, int bitStringLength) { for (int i = 0; i < bitStringLength; i++) { - BooleanEncoder.encode(builder, value.containsInt(i)); + builder.writeBoolean(value.containsInt(i)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java deleted file mode 100644 index cf009a03..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.EncodingException; - -public class FixedIntegerEncoder { - private FixedIntegerEncoder() {} - - public static void encode(BitString builder, int value, int bitStringLength) { - int mask = 1 << bitStringLength; - if (value >= mask) { - throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + bitStringLength + "'"); - } - for (int i = 0; i < bitStringLength; i++) { - mask >>= 1; - builder.append((value & mask) > 0); - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 647ad51f..cfdc431c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -15,10 +15,10 @@ public static void encode(BitString builder, List value, int elementBit for (int i = 0; i < numElements; i++) { if (i < length) { - FixedIntegerEncoder.encode(builder, value.get(i), elementBitStringLength); + builder.writeInt(value.get(i), elementBitStringLength); } else { for (int j = 0; j < elementBitStringLength; j++) { - builder.append(false); + builder.writeBoolean(false); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 9016674c..db32fca2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -26,19 +26,19 @@ public static int encode(BitString builder, Collection value) { groupCount++; writeGroup(rangeBuilder, groupStart, last); } - FixedIntegerEncoder.encode(builder, groupCount, 12); - builder.append(rangeBuilder); + builder.writeInt(groupCount, 12); + builder.write(rangeBuilder); return last; } private static void writeGroup(BitString builder, int groupStart, int last) { if (groupStart == last) { - builder.append(false); - FixedIntegerEncoder.encode(builder, groupStart, 16); + builder.writeBoolean(false); + builder.writeInt(groupStart, 16); } else { - builder.append(true); - FixedIntegerEncoder.encode(builder, groupStart, 16); - FixedIntegerEncoder.encode(builder, last, 16); + builder.writeBoolean(true); + builder.writeInt(groupStart, 16); + builder.writeInt(last, 16); } } @@ -46,7 +46,7 @@ public static IntegerSet decode(BitString reader) throws DecodingException { int count = reader.readInt(12); IntegerSet value = new IntegerSet(); for (int i = 0; i < count; i++) { - boolean group = reader.readBool(); + boolean group = reader.readBoolean(); if (group) { int start = reader.readInt(16); int end = reader.readInt(16); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java deleted file mode 100644 index 05d79502..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.EncodingException; - -public class FixedLongEncoder { - private FixedLongEncoder() {} - - public static void encode(BitString builder, long value, int bitStringLength) { - long mask = 1L << bitStringLength; - if (value >= mask) { - throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + bitStringLength + "'"); - } - for (int i = 0; i < bitStringLength; i++) { - mask >>= 1; - builder.append((value & mask) > 0); - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 9587baf8..39fd4001 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -15,9 +15,9 @@ public static void encode(BitString builder, String value, int stringLength) { code = value.charAt(i); } if (code == SPACE) { - FixedIntegerEncoder.encode(builder, 63, 6); + builder.writeInt(63, 6); } else if (code >= 65) { - FixedIntegerEncoder.encode(builder, ((int) value.charAt(i)) - 65, 6); + builder.writeInt(((int) value.charAt(i)) - 65, 6); } else { throw new EncodingException("Unencodable FixedString '" + value + "'"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 3a89e381..d32cc412 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -15,20 +15,21 @@ public static void encode(BitString builder, IntegerSet value) throws EncodingEx int bitFieldLength = max; if (rangeLength <= bitFieldLength) { - FixedIntegerEncoder.encode(builder, max, 16); - builder.append(true).append(rangeBitString); + builder.writeInt(max, 16); + builder.writeBoolean(true); + builder.write(rangeBitString); } else { - FixedIntegerEncoder.encode(builder, max, 16); - builder.append(false); + builder.writeInt(max, 16); + builder.writeBoolean(false); for (int i = 0; i < max; i++) { - builder.append(value.containsInt(i + 1)); + builder.writeBoolean(value.containsInt(i + 1)); } } } public static IntegerSet decode(BitString reader) throws DecodingException { int size = reader.readInt(16); - if (reader.readBool()) { + if (reader.readBoolean()) { return FixedIntegerRangeEncoder.decode(reader); } else { return reader.readIntegerSet(size); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 369c25bb..442fb138 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -53,11 +53,11 @@ protected BitString decodeBitString(CharSequence encodedString) { if (bitString.length() == 66) { BitString builder = new BitString(); - builder.append(bitString, 0, 48); - builder.extend(8); - builder.append(bitString, 48, 52); - builder.extend(2); - builder.append(bitString, 52, 62); + builder.write(bitString, 0, 48); + builder.writeEmpty(8); + builder.write(bitString, 48, 52); + builder.writeEmpty(2); + builder.write(bitString, 52, 62); bitString = builder; } return bitString; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index 9e132116..d755cb51 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -11,31 +11,31 @@ public class BooleanEncoderTest { @Test public void testEncode1() { BitString builder = new BitString(); - BooleanEncoder.encode(builder, false); + builder.writeBoolean(false); Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { BitString builder = new BitString(); - BooleanEncoder.encode(builder, true); + builder.writeBoolean(true); Assertions.assertEquals("1", builder.toString()); } @Test public void testDecode1() { - Assertions.assertEquals(false, BitString.of("0").readBool()); + Assertions.assertEquals(false, BitString.of("0").readBoolean()); } @Test public void testDecode2() { - Assertions.assertEquals(true, BitString.of("1").readBool()); + Assertions.assertEquals(true, BitString.of("1").readBoolean()); } @Test public void testDecode3() { try { - BitString.of("").readBool(); + BitString.of("").readBoolean(); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -45,7 +45,7 @@ public void testDecode3() { @Test public void testDecode4() { try { - BitString.of("2").readBool(); + BitString.of("2").readBoolean(); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index f2e5c394..103e7545 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -12,49 +12,49 @@ public class FibonacciIntegerEncoderTest { @Test public void testEncode1() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 1); + builder.writeFibonacci(1); Assertions.assertEquals("11", builder.toString()); } @Test public void testEncode2() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 2); + builder.writeFibonacci(2); Assertions.assertEquals("011", builder.toString()); } @Test public void testEncode3() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 3); + builder.writeFibonacci(3); Assertions.assertEquals("0011", builder.toString()); } @Test public void testEncode4() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 4); + builder.writeFibonacci(4); Assertions.assertEquals("1011", builder.toString()); } @Test public void testEncode5() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 5); + builder.writeFibonacci(5); Assertions.assertEquals("00011", builder.toString()); } @Test public void testEncode6() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 6); + builder.writeFibonacci(6); Assertions.assertEquals("10011", builder.toString()); } @Test public void testEncode7() { BitString builder = new BitString(); - FibonacciIntegerEncoder.encode(builder, 7); + builder.writeFibonacci(7); Assertions.assertEquals("01011", builder.toString()); } @@ -62,7 +62,7 @@ public void testEncode7() { public void testEncodeTooLarge() { BitString builder = new BitString(); Assertions.assertThrows(EncodingException.class, () -> - FibonacciIntegerEncoder.encode(builder, Integer.MAX_VALUE)); + builder.writeFibonacci(Integer.MAX_VALUE)); } private int decode(String str) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index bde7eb8b..82c44343 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -12,35 +12,35 @@ public class FixedIntegerEncoderTest { @Test public void testEncode1() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 0, 1); + builder.writeInt(0, 1); Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 0, 6); + builder.writeInt(0, 6); Assertions.assertEquals("000000", builder.toString()); } @Test public void testEncode3() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 1, 1); + builder.writeInt(1, 1); Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 1, 4); + builder.writeInt(1, 4); Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 7, 8); + builder.writeInt(7, 8); Assertions.assertEquals("00000111", builder.toString()); } @@ -48,7 +48,7 @@ public void testEncode5() { public void testEncode6() { try { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 8, 1); + builder.writeInt(8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index e7063ded..0b1e9411 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -12,35 +12,35 @@ public class FixedLongEncoderTest { @Test public void testEncode1() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 0, 1); + builder.writeLong(0, 1); Assertions.assertEquals("0", builder.toString()); } @Test public void testEncode2() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 0, 6); + builder.writeLong(0, 6); Assertions.assertEquals("000000", builder.toString()); } @Test public void testEncode3() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 1, 1); + builder.writeLong(1, 1); Assertions.assertEquals("1", builder.toString()); } @Test public void testEncode4() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 1, 4); + builder.writeLong(1, 4); Assertions.assertEquals("0001", builder.toString()); } @Test public void testEncode5() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 7, 8); + builder.writeLong(7, 8); Assertions.assertEquals("00000111", builder.toString()); } @@ -48,7 +48,7 @@ public void testEncode5() { @Test public void testEncode6() { BitString builder = new BitString(); - FixedLongEncoder.encode(builder, 16630898421L, 36); + builder.writeLong(16630898421L, 36); Assertions.assertEquals("001111011111010001110101111011110101", builder.toString()); } @@ -56,7 +56,7 @@ public void testEncode6() { public void testEncode7() { try { BitString builder = new BitString(); - FixedIntegerEncoder.encode(builder, 8, 1); + builder.writeInt(8, 1); Assertions.fail("EncodingException expected"); } catch (EncodingException e) { From c835146816b71242875fc9fba80e5fb28207487e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 13:29:11 -0500 Subject: [PATCH 100/146] fix packages --- .../main/java/com/iab/gpp/encoder/bitstring/BitString.java | 2 +- .../encoder/datatype/AbstractDirtyableBitStringDataType.java | 2 -- .../src/main/java/com/iab/gpp/encoder/datatype/DataType.java | 2 -- .../com/iab/gpp/encoder/datatype/{encoder => }/Dirtyable.java | 2 +- .../main/java/com/iab/gpp/encoder/datatype/DirtyableList.java | 1 - .../encoder/datatype/EncodableArrayOfFixedIntegerRanges.java | 1 - .../gpp/encoder/datatype/EncodableFibonacciIntegerRange.java | 1 - .../com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java | 1 - .../com/iab/gpp/encoder/datatype/EncodableFixedInteger.java | 2 +- .../iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java | 1 - .../iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java | 1 - .../gpp/encoder/datatype/EncodableOptimizedFixedRange.java | 1 - .../java/com/iab/gpp/encoder/datatype/FixedIntegerList.java | 1 - .../iab/gpp/encoder/datatype/{encoder => }/IntegerCache.java | 4 ++-- .../iab/gpp/encoder/datatype/{encoder => }/IntegerSet.java | 2 +- .../main/java/com/iab/gpp/encoder/datatype/RangeEntry.java | 2 -- .../datatype/encoder/FibonacciIntegerRangeEncoder.java | 1 + .../gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java | 1 + .../encoder/datatype/encoder/FixedIntegerRangeEncoder.java | 1 + .../encoder/datatype/encoder/OptimizedFixedRangeEncoder.java | 1 + .../java/com/iab/gpp/encoder/section/AbstractEncodable.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/HeaderV1.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java | 2 +- .../src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java | 2 +- .../datatype/encoder/FibonacciIntegerRangeEncoderTest.java | 1 + .../encoder/datatype/encoder/FixedBitfieldEncoderTest.java | 1 + .../datatype/encoder/FixedIntegerRangeEncoderTest.java | 1 + .../com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java | 1 + .../test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java | 2 +- 29 files changed, 19 insertions(+), 25 deletions(-) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{encoder => }/Dirtyable.java (64%) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{encoder => }/IntegerCache.java (73%) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{encoder => }/IntegerSet.java (99%) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 00d20809..4aba4d17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.bitstring; import com.iab.gpp.encoder.datatype.FixedIntegerList; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index 6c6adcb4..bd2c0ed7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; - // This class is used to handle collection types. // It is important that we monitor the collections we return for changes. public abstract class AbstractDirtyableBitStringDataType diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 158ef48b..731be014 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; - public abstract class DataType implements Dirtyable { public abstract boolean hasValue(); public abstract T getValue(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java similarity index 64% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java index 2353de1d..ad15093c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java @@ -1,4 +1,4 @@ -package com.iab.gpp.encoder.datatype.encoder; +package com.iab.gpp.encoder.datatype; public interface Dirtyable { boolean isDirty(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java index dffbb74d..93ca3841 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java @@ -3,7 +3,6 @@ import java.util.AbstractList; import java.util.ArrayList; import java.util.Collection; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; // This class tracks whether a list has been modified. final class DirtyableList extends AbstractList implements Dirtyable { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index b0ed304a..9f18f835 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -3,7 +3,6 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 8f69fc2e..e66c2137 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index a5281426..18f28806 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index c7c3c87a..66ca80da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -29,7 +29,7 @@ public void encode(BitString builder) { public void decode(BitString reader) { try { - this.value = reader.readInt(bitStringLength); + this.value = IntegerCache.valueOf(reader.readInt(bitStringLength)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index e9aac727..2fc17c8b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 20b2bce9..afa05e31 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -4,7 +4,6 @@ import java.util.function.IntSupplier; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 7d6ebbfe..541e2b76 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -2,7 +2,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index 9c49bc50..a6abb932 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -2,7 +2,6 @@ import java.util.AbstractList; import com.iab.gpp.encoder.bitstring.BitSet; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; /** * An optimized implementation of {@literal List} of fixed size. diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java similarity index 73% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java index 07471ea2..fb7027ca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java @@ -1,6 +1,6 @@ -package com.iab.gpp.encoder.datatype.encoder; +package com.iab.gpp.encoder.datatype; -import static com.iab.gpp.encoder.datatype.encoder.IntegerSet.MAX_COLLECTION_SIZE; +import static com.iab.gpp.encoder.datatype.IntegerSet.MAX_COLLECTION_SIZE; final class IntegerCache { private IntegerCache() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java similarity index 99% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java index 9e880e60..d18667cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java @@ -1,4 +1,4 @@ -package com.iab.gpp.encoder.datatype.encoder; +package com.iab.gpp.encoder.datatype; import java.util.AbstractSet; import java.util.Collection; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 027934f8..5f0aa0b0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; public final class RangeEntry implements Dirtyable { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index addce7a1..02d993a9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -2,6 +2,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index c65a864a..cb1e14aa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; public class FixedBitfieldEncoder { private FixedBitfieldEncoder() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index db32fca2..11ea840e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -2,6 +2,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index d32cc412..a7656e0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype.encoder; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index 7fc75676..cb095ae7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.section; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; +import com.iab.gpp.encoder.datatype.Dirtyable; public abstract class AbstractEncodable implements Dirtyable { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 4f23d3b1..9c72f472 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.section; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 18566835..6c617596 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -3,8 +3,8 @@ import java.time.Instant; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.segment.TcfCaV1CoreSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 54b54042..42ba5c2c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -3,8 +3,8 @@ import java.time.Instant; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.segment.TcfEuV2CoreSegment; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index b1fa03eb..24905960 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoderTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 65579a53..45a2feb0 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FixedBitfieldEncoderTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index bc9afb56..7d76b98f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -7,6 +7,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoderTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java index 7d4cdb3c..acd64a61 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.datatype.IntegerSet; class IntegerSetTest { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index dda55beb..404646ff 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -8,8 +8,8 @@ import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; From 2638edb815fd75a4ea9c1e582a898ec79e29b1b7 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 14:20:35 -0500 Subject: [PATCH 101/146] fewer field updates --- .../iab/gpp/encoder/bitstring/BitString.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 4aba4d17..6e1f1a44 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -140,26 +140,40 @@ public void write(BitString other) { } public int readInt(int length) { - int out = 0; + int from = readIndex; + int to = from + length; + int writeIndex = this.writeIndex; int mask = 1 << length; - for (int i = 0; i < length; i++) { + int out = 0; + for (int i = from; i < to; i++) { mask >>= 1; - if (readBoolean()) { + if (i >= writeIndex) { + throw new DecodingException("Bit string access out of range"); + } + if (bitSet.get(i)) { out |= mask; } } + readIndex = to; return out; } public long readLong(int length) { - long out = 0; + int from = readIndex; + int to = from + length; + int writeIndex = this.writeIndex; long mask = 1L << length; - for (int i = 0; i < length; i++) { + long out = 0; + for (int i = from; i < to; i++) { mask >>= 1; - if (readBoolean()) { + if (i >= writeIndex) { + throw new DecodingException("Bit string access out of range"); + } + if (bitSet.get(i)) { out |= mask; } } + readIndex = to; return out; } From 51a08ab6f9e94d106cac08dabfca475f15a3ed99 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 15:17:12 -0500 Subject: [PATCH 102/146] flip byte order --- .../base64/AbstractBase64UrlEncoder.java | 18 ++++---- .../com/iab/gpp/encoder/bitstring/BitSet.java | 41 ++++++++++--------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index fba340f7..5d56cd5e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -22,11 +22,7 @@ public abstract class AbstractBase64UrlEncoder { static { Arrays.fill(REVERSE_DICT, NO_SYMBOL); for (int i = 0; i < DICT.length(); i++) { - // NOTE: the bit string is stored in a long[] and read from LSB to MSB - // but each base64 digit is read from MSB to LSB - // so they need to be reversed. - int value = Integer.reverse(i) >>> -BASE64_BITS; - REVERSE_DICT[DICT.charAt(i)] = value; + REVERSE_DICT[DICT.charAt(i)] = i; } } @@ -62,10 +58,10 @@ public BitString decode(CharSequence str) { if ((b1 | b2 | b3 | b4) < 0) { throw new DecodingException("Undecodable Base64URL string"); } - int bits0 = b4 << 18 | b3 << 12 | b2 << 6 | b1; - words[dst++] = (byte)(bits0); - words[dst++] = (byte)(bits0 >> 8); + int bits0 = b1 << 18 | b2 << 12 | b3 << 6 | b4; words[dst++] = (byte)(bits0 >> 16); + words[dst++] = (byte)(bits0 >> 8); + words[dst++] = (byte)(bits0); } if (length > limit) { remainder(str, words, length, src, dst); @@ -88,9 +84,9 @@ private static final void remainder(CharSequence str, byte[] words, int length, if ((b1 | b2 | b3 | b4) < 0) { throw new DecodingException("Undecodable Base64URL string"); } - int bits0 = b4 << 18 | b3 << 12 | b2 << 6 | b1; - words[dst++] = (byte)(bits0); - words[dst++] = (byte)(bits0 >> 8); + int bits0 = b1 << 18 | b2 << 12 | b3 << 6 | b4; words[dst++] = (byte)(bits0 >> 16); + words[dst++] = (byte)(bits0 >> 8); + words[dst++] = (byte)(bits0); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 3baab5e1..6c0fe4b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -8,9 +8,10 @@ public final class BitSet { private static final byte[] EMPTY = new byte[0]; private static final int ADDRESS_BITS_PER_WORD = 3; - public static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; - - /* Used to shift left or right for a partial word mask */ + private static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; + private static final int MASK = 1 << (BITS_PER_WORD - 1); + private static final int MODULO = BITS_PER_WORD - 1; + private static final int CORRECTION = Integer.SIZE - BITS_PER_WORD; private static final int WORD_MASK = 0xffffffff; private byte[] words; @@ -26,14 +27,19 @@ public BitSet(int initialCapacity) { public BitSet() { this(EMPTY); } - - public static int wordIndex(int index) { + + private static int wordIndex(int index) { if (index < 0) { throw new DecodingException("got negative word index"); } return index >> ADDRESS_BITS_PER_WORD; } - + + private static int wordMask(int index) { + int bit = index & MODULO; + return MASK >> bit; + } + private byte[] ensureIndex(int wordIndex) { byte[] words = this.words; int wordsUsed = words.length; @@ -48,9 +54,8 @@ private byte[] ensureIndex(int wordIndex) { public boolean get(int bitIndex) { int wordIndex = wordIndex(bitIndex); byte[] words = this.words; - int bit = bitIndex % BITS_PER_WORD; return (wordIndex < words.length) - && ((words[wordIndex] >>> bit) & 1) == 1; + && (words[wordIndex] & wordMask(bitIndex)) != 0; } public void clear(int from, int to) { @@ -63,8 +68,7 @@ public void clear(int bitIndex) { int wordIndex = wordIndex(bitIndex); byte[] words = this.words; if (wordIndex < words.length) { - int bit = bitIndex % BITS_PER_WORD; - words[wordIndex] &= ~(1 << bit); + words[wordIndex] &= ~wordMask(bitIndex); } } @@ -77,16 +81,16 @@ public int nextSetBit(int fromIndex) { } int bit = fromIndex % BITS_PER_WORD; - int word = words[u] & (WORD_MASK << bit); + int word = (words[u] << CORRECTION) & (WORD_MASK >>> bit); while (true) { if (word != 0) { - return (u * BITS_PER_WORD) + Integer.numberOfTrailingZeros(word); + return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word); } if (++u == wordsInUse) { return -1; } - word = words[u]; + word = (words[u] << CORRECTION); } } @@ -99,20 +103,19 @@ public void set(int from, int to) { public void set(int bitIndex) { int wordIndex = wordIndex(bitIndex); byte[] words = ensureIndex(wordIndex); - int bit = bitIndex % BITS_PER_WORD; - words[wordIndex] |= (1 << bit); + words[wordIndex] |= wordMask(bitIndex); } public boolean set(int bitIndex, boolean value) { int wordIndex = wordIndex(bitIndex); + int wordMask = wordMask(bitIndex); byte[] words = ensureIndex(wordIndex); - int bit = bitIndex % BITS_PER_WORD; - boolean prior = ((words[wordIndex] >>> bit) & 1) == 1; + boolean prior = (words[wordIndex] & wordMask) != 0; if (prior != value) { if (value) { - words[wordIndex] |= (1 << bit); + words[wordIndex] |= wordMask; } else { - words[wordIndex] &= ~(1 << bit); + words[wordIndex] &= ~wordMask; } } return prior; From 9ed3b17e0bded30a1119d348dd59fa5bd0f797cf Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 17:21:18 -0500 Subject: [PATCH 103/146] faster numeric decoders --- .../com/iab/gpp/encoder/bitstring/BitSet.java | 55 ++++++++++++++++++- .../iab/gpp/encoder/bitstring/BitString.java | 30 ++-------- 2 files changed, 60 insertions(+), 25 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 6c0fe4b1..1b81ac19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -80,7 +80,7 @@ public int nextSetBit(int fromIndex) { return -1; } - int bit = fromIndex % BITS_PER_WORD; + int bit = fromIndex & MODULO; int word = (words[u] << CORRECTION) & (WORD_MASK >>> bit); while (true) { @@ -120,4 +120,57 @@ public boolean set(int bitIndex, boolean value) { } return prior; } + + + public int readInt(int from, int to) { + int startWordIndex = wordIndex(from); + int startBit = from & MODULO; + int endWordIndex = wordIndex(to); + int endBit = to & MODULO; + // TODO: is this needed if the caller checks range? + byte[] words = ensureIndex(endWordIndex); + int out = 0; + for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { + int word = words[wordIndex] & 0xff; + if (wordIndex == startWordIndex) { + int mask = (0xff >>> startBit); + word &= mask; + } + if (wordIndex == endWordIndex) { + int mask = ~(0xff >> endBit); + word &= mask; + out |= word >>> (BITS_PER_WORD - endBit); + break; + } + int remaining = to - ((wordIndex + 1) << ADDRESS_BITS_PER_WORD); + out |= word << remaining; + } + return out; + } + + public long readLong(int from, int to) { + int startWordIndex = wordIndex(from); + int startBit = from & MODULO; + int endWordIndex = wordIndex(to); + int endBit = to & MODULO; + // TODO: is this needed if the caller checks range? + byte[] words = ensureIndex(endWordIndex); + long out = 0; + for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { + long word = words[wordIndex] & 0xff; + if (wordIndex == startWordIndex) { + int mask = (0xff >>> startBit); + word &= mask; + } + if (wordIndex == endWordIndex) { + int mask = ~(0xff >> endBit); + word &= mask; + out |= word >>> (BITS_PER_WORD - endBit); + break; + } + int remaining = to - ((wordIndex + 1) << ADDRESS_BITS_PER_WORD); + out |= word << remaining; + } + return out; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 6e1f1a44..8303dadf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -142,39 +142,21 @@ public void write(BitString other) { public int readInt(int length) { int from = readIndex; int to = from + length; - int writeIndex = this.writeIndex; - int mask = 1 << length; - int out = 0; - for (int i = from; i < to; i++) { - mask >>= 1; - if (i >= writeIndex) { - throw new DecodingException("Bit string access out of range"); - } - if (bitSet.get(i)) { - out |= mask; - } + if (from >= writeIndex) { + throw new DecodingException("Bit string access out of range"); } readIndex = to; - return out; + return bitSet.readInt(from, to); } public long readLong(int length) { int from = readIndex; int to = from + length; - int writeIndex = this.writeIndex; - long mask = 1L << length; - long out = 0; - for (int i = from; i < to; i++) { - mask >>= 1; - if (i >= writeIndex) { - throw new DecodingException("Bit string access out of range"); - } - if (bitSet.get(i)) { - out |= mask; - } + if (from >= writeIndex) { + throw new DecodingException("Bit string access out of range"); } readIndex = to; - return out; + return bitSet.readLong(from, to); } public boolean readBoolean() { From adcdb9b14c223282b259091deb82125d57ef6fd6 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 3 Feb 2026 17:27:23 -0500 Subject: [PATCH 104/146] cleanup --- .../com/iab/gpp/encoder/bitstring/BitSet.java | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 1b81ac19..8a640c6b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -12,7 +12,7 @@ public final class BitSet { private static final int MASK = 1 << (BITS_PER_WORD - 1); private static final int MODULO = BITS_PER_WORD - 1; private static final int CORRECTION = Integer.SIZE - BITS_PER_WORD; - private static final int WORD_MASK = 0xffffffff; + private static final int WORD_MASK = 0xff; private byte[] words; @@ -81,16 +81,17 @@ public int nextSetBit(int fromIndex) { } int bit = fromIndex & MODULO; - int word = (words[u] << CORRECTION) & (WORD_MASK >>> bit); + int word = words[u] & (WORD_MASK >>> bit); while (true) { + word &= WORD_MASK; if (word != 0) { - return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word); + return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word) - CORRECTION; } if (++u == wordsInUse) { return -1; } - word = (words[u] << CORRECTION); + word = words[u]; } } @@ -131,14 +132,12 @@ public int readInt(int from, int to) { byte[] words = ensureIndex(endWordIndex); int out = 0; for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { - int word = words[wordIndex] & 0xff; + int word = words[wordIndex] & WORD_MASK; if (wordIndex == startWordIndex) { - int mask = (0xff >>> startBit); - word &= mask; + word &= WORD_MASK >>> startBit; } if (wordIndex == endWordIndex) { - int mask = ~(0xff >> endBit); - word &= mask; + word &= ~(WORD_MASK >> endBit); out |= word >>> (BITS_PER_WORD - endBit); break; } @@ -157,14 +156,12 @@ public long readLong(int from, int to) { byte[] words = ensureIndex(endWordIndex); long out = 0; for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { - long word = words[wordIndex] & 0xff; + long word = words[wordIndex] & WORD_MASK; if (wordIndex == startWordIndex) { - int mask = (0xff >>> startBit); - word &= mask; + word &= (WORD_MASK >>> startBit); } if (wordIndex == endWordIndex) { - int mask = ~(0xff >> endBit); - word &= mask; + word &= ~(WORD_MASK >> endBit); out |= word >>> (BITS_PER_WORD - endBit); break; } From 8df35e0e55d8d975f72ee403f9fe2ab7f24dfff4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 9 Feb 2026 17:25:04 -0500 Subject: [PATCH 105/146] clean up DataType --- .../AbstractDirtyableBitStringDataType.java | 14 ++-- .../AbstractEncodableBitStringDataType.java | 73 +++---------------- .../iab/gpp/encoder/datatype/DataType.java | 64 +++++++++++++++- .../EncodableArrayOfFixedIntegerRanges.java | 28 +++---- .../encoder/datatype/EncodableBoolean.java | 22 ++++-- .../encoder/datatype/EncodableDataType.java | 9 --- .../encoder/datatype/EncodableDatetime.java | 20 +++-- .../datatype/EncodableFibonacciInteger.java | 25 +++---- .../EncodableFibonacciIntegerRange.java | 24 +++--- .../datatype/EncodableFixedBitfield.java | 21 +++--- .../datatype/EncodableFixedInteger.java | 26 ++++--- .../datatype/EncodableFixedIntegerList.java | 25 +++---- .../datatype/EncodableFixedIntegerRange.java | 24 +++--- .../datatype/EncodableFixedString.java | 26 ++++--- .../datatype/EncodableFlexibleBitfield.java | 23 +++--- .../EncodableOptimizedFixedRange.java | 24 +++--- .../encoder/datatype/UnencodableBoolean.java | 22 +++--- .../datatype/UnencodableCharacter.java | 56 ++------------ .../encoder/datatype/UnencodableInteger.java | 56 ++------------ .../gpp/encoder/section/EncodableSection.java | 29 +++----- .../segment/AbstractBase64Segment.java | 4 +- .../AbstractLazilyEncodableSegment.java | 61 +++++++++------- .../gpp/encoder/segment/EncodableSegment.java | 5 +- .../encoder/segment/TcfCaV1CoreSegment.java | 6 +- .../TcfCaV1PublisherPurposesSegment.java | 2 +- .../encoder/segment/TcfEuV2CoreSegment.java | 7 +- .../TcfEuV2PublisherPurposesSegment.java | 2 +- .../gpp/encoder/segment/UspV1CoreSegment.java | 16 ++-- .../EncodableFixedIntegerRangeTest.java | 16 ++-- .../EncodableOptimizedFixedRangeTest.java | 32 ++++---- .../FixedIntegerListEncoderTest.java | 6 +- 31 files changed, 339 insertions(+), 429 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java rename iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/{encoder => }/FixedIntegerListEncoderTest.java (97%) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index bd2c0ed7..5fdc05f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -5,18 +5,16 @@ public abstract class AbstractDirtyableBitStringDataType extends AbstractEncodableBitStringDataType { - protected AbstractDirtyableBitStringDataType(boolean hardFailIfMissing) { - super(hardFailIfMissing); - } - @Override - public boolean isDirty() { - return super.isDirty() || (value != null && value.isDirty()); + public boolean isDirty(Object[] values, int index) { + T value = get(values, index); + return (value != null && value.isDirty()); } + @SuppressWarnings("unchecked") @Override - public void setDirty(boolean dirty) { - super.setDirty(dirty); + public void setDirty(Object[] values, int index, boolean dirty) { + T value = (T) values[index]; if (value != null) { value.setDirty(dirty); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index cb0945b1..9ef6b881 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -1,76 +1,23 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import java.util.function.Predicate; -import java.util.stream.Collectors; - -import com.iab.gpp.encoder.error.ValidationException; - -public abstract class AbstractEncodableBitStringDataType extends EncodableDataType { - //this if for backwards compatibility with the newer fields - protected boolean hardFailIfMissing = true; - private boolean dirty = false; - private Predicate validator = null; - protected T value; - - protected AbstractEncodableBitStringDataType(boolean hardFailIfMissing) { - this.hardFailIfMissing = hardFailIfMissing; - } +import com.iab.gpp.encoder.bitstring.BitString; +public abstract class AbstractEncodableBitStringDataType extends DataType { public AbstractEncodableBitStringDataType withValidator(Predicate validator) { this.validator = validator; return this; } - - public final boolean hasValue() { - return this.value != null; - } - - public final T getValue() { - if (this.value == null) { - this.value = getDefaultValue(); - } - return this.value; - } - - protected T getDefaultValue() { - return null; - } - - public void setValue(Object value) { - setValue(value, true); - } - @SuppressWarnings("unchecked") - protected final void setValue(Object value, boolean dirty) { - T v = (T) value; - if (validator == null || validator.test(v)) { - this.value = v; - this.dirty = dirty; - } else { - if (v instanceof Collection) { - throw new ValidationException("Invalid value '" - + ((Collection) v).stream().map(Object::toString).collect(Collectors.joining(",")) + "'"); - } else { - throw new ValidationException("Invalid value '" + v + "'"); - } - } - - } - - public final boolean getHardFailIfMissing() { - return this.hardFailIfMissing; - } - - public boolean isDirty() { - return dirty; - } - - public void setDirty(boolean dirty) { - this.dirty = dirty; + public final void encode(BitString writer, Object[] values, int index) { + encode(writer, get(values, index)); } + + protected abstract void encode(BitString writer, T value); - public String toString() { - return String.valueOf(value); + public final void decode(BitString reader, Object[] values, int index) { + values[index] = decode(reader); } + + protected abstract T decode(BitString reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 731be014..4c9a2569 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -1,7 +1,63 @@ package com.iab.gpp.encoder.datatype; -public abstract class DataType implements Dirtyable { - public abstract boolean hasValue(); - public abstract T getValue(); - public abstract void setValue(Object value); +import java.util.Collection; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import com.iab.gpp.encoder.error.ValidationException; + +public abstract class DataType { + + protected Predicate validator = null; + + public DataType withValidator(Predicate validator) { + this.validator = validator; + return this; + } + + protected final void validate(T v) { + if (validator == null || validator.test(v)) { + return; + } else { + if (v instanceof Collection) { + throw new ValidationException("Invalid value '" + + ((Collection) v).stream().map(Object::toString).collect(Collectors.joining(",")) + "'"); + } else { + throw new ValidationException("Invalid value '" + v + "'"); + } + } + } + + public boolean isDirty(Object[] values, int index) { + return false; + } + + public void setDirty(Object[] values, int index, boolean dirty) { + // pass + } + + @SuppressWarnings("unchecked") + public final T get(Object[] values, int index) { + T value = (T) values[index]; + if (value == null) { + value = initialize(); + values[index] = value; + } + return value; + } + + public final void set(Object[] values, int index, Object newValue) { + T oldValue = get(values, index); + T effectiveValue = processValue(oldValue, newValue); + validate(effectiveValue); + values[index] = effectiveValue; + } + + protected abstract T initialize(); + + // TODO: rename + @SuppressWarnings("unchecked") + protected T processValue(T oldValue, Object newValue) { + return (T) newValue; + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 9f18f835..d46c589d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -8,38 +8,38 @@ public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { - private int keyBitStringLength; - private int typeBitStringLength; + private final int keyBitStringLength; + private final int typeBitStringLength; public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { - super(hardFailIfMissing); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; - this.value = new DirtyableList<>(); } @Override - public void encode(BitString sb) { - try { - List entries = this.value; + protected DirtyableList initialize() { + return new DirtyableList<>(); + } + @Override + protected void encode(BitString sb, DirtyableList entries) { + try { sb.writeInt(entries.size(), 12); for (RangeEntry entry : entries) { sb.writeInt(entry.getKey(), keyBitStringLength); sb.writeInt(entry.getType(), typeBitStringLength); FixedIntegerRangeEncoder.encode(sb, entry.getIds()); } - } catch (Exception e) { throw new EncodingException(e); } } @Override - public void decode(BitString reader) { + protected DirtyableList decode(BitString reader) { try { int size = reader.readInt(12); - value.clear(); + DirtyableList value = initialize(); for (int i = 0; i < size; i++) { int key = reader.readInt(keyBitStringLength); int type = reader.readInt(typeBitStringLength); @@ -47,6 +47,7 @@ public void decode(BitString reader) { RangeEntry entry = new RangeEntry(key, type, ids); value.add(entry); } + return value; } catch (Exception e) { throw new DecodingException(e); } @@ -54,8 +55,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((List) value); + protected DirtyableList processValue(DirtyableList oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((List) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 1bfa4f19..08465a8a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -6,22 +6,30 @@ public final class EncodableBoolean extends AbstractEncodableBitStringDataType { - public EncodableBoolean(Boolean value) { - super(true); - setValue(value, false); + private final Boolean initial; + + public EncodableBoolean(Boolean initial) { + this.initial = initial; + } + + @Override + protected Boolean initialize() { + return initial; } - public void encode(BitString builder){ + @Override + protected void encode(BitString builder, Boolean value){ try { - builder.writeBoolean(this.value); + builder.writeBoolean(value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected Boolean decode(BitString reader) { try { - this.value = reader.readBoolean(); + return reader.readBoolean(); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java deleted file mode 100644 index b63b410f..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import com.iab.gpp.encoder.bitstring.BitString; - -public abstract class EncodableDataType extends DataType { - public abstract void encode(BitString writer); - - public abstract void decode(BitString reader); -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index f55252dd..1977078e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -8,26 +8,24 @@ public final class EncodableDatetime extends AbstractEncodableBitStringDataType { - protected EncodableDatetime() { - super(true); + @Override + protected Instant initialize() { + return Instant.EPOCH; } - public EncodableDatetime(Instant value) { - super(true); - setValue(value, false); - } - - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, Instant value) { try { - DatetimeEncoder.encode(builder, this.value); + DatetimeEncoder.encode(builder, value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected Instant decode(BitString reader) { try { - this.value = DatetimeEncoder.decode(reader); + return DatetimeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index f4dacdb1..74a327a3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -6,31 +6,30 @@ public final class EncodableFibonacciInteger extends AbstractEncodableBitStringDataType { - protected EncodableFibonacciInteger() { - super(true); - } + private final Integer initial; - public EncodableFibonacciInteger(Integer value) { - super(true); - setValue(value, false); + public EncodableFibonacciInteger(Integer initial) { + this.initial = initial; } - public EncodableFibonacciInteger(Integer value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - setValue(value, false); + @Override + protected Integer initialize() { + return initial; } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, Integer value) { try { - builder.writeFibonacci(this.value); + builder.writeFibonacci(value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected Integer decode(BitString reader) { try { - this.value = reader.readFibonacci(); + return reader.readFibonacci(); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index e66c2137..96987231 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -8,26 +8,24 @@ public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitStringDataType { - public EncodableFibonacciIntegerRange() { - super(true); - } - @Override - protected IntegerSet getDefaultValue() { + public IntegerSet initialize() { return new IntegerSet(); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - FibonacciIntegerRangeEncoder.encode(builder, this.getValue()); + FibonacciIntegerRangeEncoder.encode(builder, value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = FibonacciIntegerRangeEncoder.decode(reader); + return FibonacciIntegerRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } @@ -35,9 +33,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 18f28806..db2d531e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -11,26 +11,27 @@ public final class EncodableFixedBitfield extends AbstractDirtyableBitStringData private final int numElements; public EncodableFixedBitfield(int numElements) { - super(true); this.numElements = numElements; } @Override - protected IntegerSet getDefaultValue() { + protected IntegerSet initialize() { return new IntegerSet(numElements); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - FixedBitfieldEncoder.encode(builder, this.getValue(), this.numElements); + FixedBitfieldEncoder.encode(builder, value, this.numElements); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = reader.readIntegerSet(this.numElements); + return reader.readIntegerSet(this.numElements); } catch (Exception e) { throw new DecodingException(e); } @@ -38,9 +39,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 66ca80da..865e4988 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -6,30 +6,32 @@ public final class EncodableFixedInteger extends AbstractEncodableBitStringDataType { - private int bitStringLength; - - protected EncodableFixedInteger(int bitStringLength) { - super(true); + private final int bitStringLength; + private final Integer initial; + + public EncodableFixedInteger(int bitStringLength, Integer initial) { this.bitStringLength = bitStringLength; + this.initial = initial; } - public EncodableFixedInteger(int bitStringLength, Integer value) { - super(true); - this.bitStringLength = bitStringLength; - setValue(value, false); + @Override + protected Integer initialize() { + return initial; } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, Integer value) { try { - builder.writeInt(this.value, this.bitStringLength); + builder.writeInt(value, this.bitStringLength); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected Integer decode(BitString reader) { try { - this.value = IntegerCache.valueOf(reader.readInt(bitStringLength)); + return IntegerCache.valueOf(reader.readInt(bitStringLength)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 3d5e411e..11ff574b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -8,31 +8,32 @@ public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType { - private int elementBitStringLength; - private int numElements; + private final int elementBitStringLength; + private final int numElements; public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { - super(true); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; } @Override - protected FixedIntegerList getDefaultValue() { + protected FixedIntegerList initialize() { return new FixedIntegerList(elementBitStringLength, numElements); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, FixedIntegerList value) { try { - FixedIntegerListEncoder.encode(builder, this.getValue(), this.elementBitStringLength, this.numElements); + FixedIntegerListEncoder.encode(builder, value, this.elementBitStringLength, this.numElements); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected FixedIntegerList decode(BitString reader) { try { - this.value = reader.readFixedIntegerList(elementBitStringLength, numElements); + return reader.readFixedIntegerList(elementBitStringLength, numElements); } catch (Exception e) { throw new DecodingException(e); } @@ -40,14 +41,12 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - FixedIntegerList value = this.getValue(); + protected FixedIntegerList processValue(FixedIntegerList oldValue, Object newValue) { List list = (List) newValue; int size = list.size(); for (int i = 0; i < numElements; i++) { - value.set(i, i < size ? list.get(i) : 0); + oldValue.set(i, i < size ? list.get(i) : 0); } - // call validator - super.setValue(value); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 2fc17c8b..c1aeee48 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -8,26 +8,24 @@ public final class EncodableFixedIntegerRange extends AbstractDirtyableBitStringDataType { - protected EncodableFixedIntegerRange() { - super(true); - } - @Override - protected IntegerSet getDefaultValue() { + protected IntegerSet initialize() { return new IntegerSet(); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - FixedIntegerRangeEncoder.encode(builder, this.getValue()); + FixedIntegerRangeEncoder.encode(builder, value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = FixedIntegerRangeEncoder.decode(reader); + return FixedIntegerRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } @@ -35,9 +33,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 740b7de7..1d4ac2de 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -7,30 +7,32 @@ public final class EncodableFixedString extends AbstractEncodableBitStringDataType { - private int stringLength; + private final int stringLength; + private final String initial; - protected EncodableFixedString(int stringLength) { - super(true); + public EncodableFixedString(int stringLength, String initial) { this.stringLength = stringLength; + this.initial = initial; } - public EncodableFixedString(int stringLength, String value) { - super(true); - this.stringLength = stringLength; - setValue(value, false); + @Override + protected String initialize() { + return initial; } - - public void encode(BitString builder) { + + @Override + protected void encode(BitString builder, String value) { try { - FixedStringEncoder.encode(builder, this.value, this.stringLength); + FixedStringEncoder.encode(builder, value, this.stringLength); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected String decode(BitString reader) { try { - this.value = FixedStringEncoder.decode(reader, this.stringLength); + return FixedStringEncoder.decode(reader, this.stringLength); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index afa05e31..7dddb9c4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -9,29 +9,30 @@ public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringDataType { - private IntSupplier getLengthSupplier; + private final IntSupplier getLengthSupplier; public EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { - super(true); this.getLengthSupplier = getLengthSupplier; } @Override - protected IntegerSet getDefaultValue() { + protected IntegerSet initialize() { return new IntegerSet(); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - FixedBitfieldEncoder.encode(builder, this.getValue(), this.getLengthSupplier.getAsInt()); + FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.getAsInt()); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = reader.readIntegerSet(getLengthSupplier.getAsInt()); + return reader.readIntegerSet(getLengthSupplier.getAsInt()); } catch (Exception e) { throw new DecodingException(e); } @@ -40,9 +41,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 541e2b76..6e51a002 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -9,26 +9,24 @@ public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStringDataType { - public EncodableOptimizedFixedRange() { - super(true); - } - @Override - protected IntegerSet getDefaultValue() { + protected IntegerSet initialize() { return new IntegerSet(); } - public void encode(BitString builder) { + @Override + protected void encode(BitString builder, IntegerSet value) { try { - OptimizedFixedRangeEncoder.encode(builder, this.getValue()); + OptimizedFixedRangeEncoder.encode(builder, value); } catch (Exception e) { throw new EncodingException(e); } } - public void decode(BitString reader) { + @Override + protected IntegerSet decode(BitString reader) { try { - this.value = OptimizedFixedRangeEncoder.decode(reader); + return OptimizedFixedRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } @@ -36,9 +34,9 @@ public void decode(BitString reader) { @SuppressWarnings("unchecked") @Override - public void setValue(Object newValue) { - IntegerSet value = this.getValue(); - value.clear(); - value.addAll((Collection) newValue); + protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { + oldValue.clear(); + oldValue.addAll((Collection) newValue); + return oldValue; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 71171ecd..b641fcb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -4,21 +4,25 @@ public final class UnencodableBoolean extends AbstractEncodableBitStringDataType { - protected UnencodableBoolean() { - super(true); - } + private final Boolean initial; - public UnencodableBoolean(Boolean value) { - super(true); - setValue(value, false); + public UnencodableBoolean(Boolean initial) { + this.initial = initial; + } + + @Override + protected Boolean initialize() { + return initial; } - public void encode(BitString builder){ + @Override + protected void encode(BitString writer, Boolean value) { // pass } - public void decode(BitString reader) { - // pass + @Override + protected Boolean decode(BitString reader) { + return Boolean.FALSE; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 8b0739fe..ee9cc941 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -1,61 +1,19 @@ package com.iab.gpp.encoder.datatype; import java.util.function.Predicate; -import com.iab.gpp.encoder.error.ValidationException; public final class UnencodableCharacter extends DataType { - private boolean dirty = false; - private Predicate validator; - private Character value = null; - - public UnencodableCharacter() { - this.validator = v -> true; - } - - public UnencodableCharacter(Character value) { - this.validator = v -> true; - setValue(value); - } - - public UnencodableCharacter(Character value, Predicate validator) { - this.validator = validator; - setValue(value); - } - - public void setValidator(Predicate validator) { - this.validator = validator; - } - - @Override - public boolean hasValue() { - return this.value != null; - } - - @Override - public Character getValue() { - return this.value; - } - - @Override - public void setValue(Object value) { - Character c = (Character)value.toString().charAt(0); - if(validator.test(c)) { - this.value = c; - this.dirty = true; - } else { - throw new ValidationException("Invalid value '" + c + "'"); - } - } - - @Override - public boolean isDirty() { - return dirty; + private final Character initial; + + public UnencodableCharacter(Character initial, Predicate validator) { + this.initial = initial; + withValidator(validator); } @Override - public void setDirty(boolean dirty) { - this.dirty = dirty; + protected Character initialize() { + return initial; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index 8ffc7e02..17c9876d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -1,60 +1,16 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; -import com.iab.gpp.encoder.error.ValidationException; - public final class UnencodableInteger extends DataType { - private boolean dirty; - private Predicate validator; - private Integer value = null; - - public UnencodableInteger() { - this.validator = v -> true; - } - - public UnencodableInteger(Integer value) { - this.validator = v -> true; - setValue(value); - } - - public UnencodableInteger(Integer value, Predicate validator) { - this.validator = validator; - setValue(value); - } - - public void setValidator(Predicate validator) { - this.validator = validator; + private final Integer initial; + + public UnencodableInteger(Integer initial) { + this.initial = initial; } @Override - public boolean hasValue() { - return this.value != null; + protected Integer initialize() { + return initial; } - @Override - public Integer getValue() { - return this.value; - } - - @Override - public void setValue(Object value) { - Integer i = (Integer)value; - if(validator.test(i)) { - this.value = i; - this.dirty = true; - } else { - throw new ValidationException("Invalid value '" + i + "'"); - } - } - - @Override - public boolean isDirty() { - return dirty; - } - - @Override - public void setDirty(boolean dirty) { - this.dirty = dirty; - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 089ae70b..4b10013f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.List; -import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -64,7 +63,7 @@ public final boolean hasField(FieldKey fieldName) { for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); - if (key != null && segment.getField(key) != null) { + if (key != null) { return true; } } @@ -78,7 +77,7 @@ public final boolean hasField(E fieldName) { int numSegments = size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); - if (segment.getField(fieldName) != null) { + if (segment.hasField(fieldName)) { return true; } } @@ -94,10 +93,7 @@ public final Object getFieldValue(FieldKey fieldName) { EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null) { - DataType field = segment.getField(key); - if (field != null) { - return field.getValue(); - } + return segment.getFieldValue(key); } } @@ -110,9 +106,8 @@ public final Object getFieldValue(E fieldName) { int numSegments = size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); - DataType field = segment.getField(fieldName); - if (field != null) { - return field.getValue(); + if (segment.hasField(fieldName)) { + return segment.getFieldValue(fieldName); } } @@ -127,12 +122,9 @@ public final void setFieldValue(FieldKey fieldName, Object value) { EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null) { - DataType field = segment.getField(key); - if (field != null) { - field.setValue(value); - onSet(key); - return; - } + segment.setFieldValue(key, value); + onSet(key); + return; } } @@ -145,9 +137,8 @@ public final void setFieldValue(E fieldName, Object value) { int numSegments = size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); - DataType field = segment.getField(fieldName); - if(field != null) { - field.setValue(value); + if(segment.hasField(fieldName)) { + segment.setFieldValue(fieldName, value); onSet(fieldName); return; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 16d2bd50..abe64edc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -26,7 +26,7 @@ protected final CharSequence doEncode() { for (int i = 0; i < size; i++) { AbstractEncodableBitStringDataType field = get(i); if (field != null) { - field.encode(bitString); + field.encode(bitString, values, i); } else { throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); } @@ -44,7 +44,7 @@ protected final void doDecode(CharSequence encodedString) { AbstractEncodableBitStringDataType field = get(i); if (field != null) { try { - field.decode(bitString); + field.decode(bitString, values, i); } catch (Exception e) { throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 81372e59..a06c981d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -21,18 +21,15 @@ abstract class AbstractLazilyEncodableSegment & FieldKey, T ex }); protected final FieldNames fieldNames; - private final Object[] values; + private final Object[] types; + protected final Object[] values; + private boolean dirty; protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { this.fieldNames = fieldNames; this.values = new Object[fieldNames.size()]; - } - - - @Override - public final DataType getField(E fieldName) { - ensureDecode(); - return get(fieldName); + // TODO: move to FieldNames + this.types = new Object[fieldNames.size()]; } @Override @@ -45,12 +42,12 @@ protected final void initialize(E key, T value) { if (index == null) { throw new IllegalArgumentException("invalid key "+ key); } - values[index] = value; + types[index] = value; } @SuppressWarnings("unchecked") protected final T get(int index) { - return (T) values[index]; + return (T) types[index]; } protected final T get(E key) { @@ -61,12 +58,19 @@ protected final T get(E key) { return null; } + @Override + public final boolean hasField(E key) { + return get(key) != null; + } + @Override public final boolean isDirty() { + if (dirty) { + return dirty; + } int size = fieldNames.size(); for (int i = 0; i < size; i++) { - T value = get(i); - if (value != null && value.isDirty()) { + if (get(i).isDirty(values, i)) { return true; } } @@ -75,34 +79,39 @@ public final boolean isDirty() { @Override public final void setDirty(boolean dirty) { + this.dirty = dirty; int size = fieldNames.size(); for (int i = 0; i < size; i++) { - T value = get(i); - if (value != null) { - value.setDirty(dirty); - } + get(i).setDirty(values, i, dirty); } } @Override - public Object getFieldValue(E fieldName) { + public final Object getFieldValue(E fieldName) { ensureDecode(); - - DataType field = this.get(fieldName); - if (field != null) { - return field.getValue(); + return getFieldValueUnsafe(fieldName); + } + + protected final Object getFieldValueUnsafe(E fieldName) { + Integer index = fieldNames.getIndex(fieldName); + if (index != null) { + return get(index).get(values, index); } else { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } } @Override - public void setFieldValue(E fieldName, Object value) { + public final void setFieldValue(E fieldName, Object value) { ensureDecode(); + setFieldValueUnsafe(fieldName, value); + } - DataType field = this.get(fieldName); - if (field != null) { - field.setValue(value); + protected final void setFieldValueUnsafe(E fieldName, Object value) { + Integer index = fieldNames.getIndex(fieldName); + if (index != null) { + get(index).set(values, index, value); + dirty = true; } else { throw new InvalidFieldException(fieldName + " not found"); } @@ -116,7 +125,7 @@ public String toString() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { E field = fieldNames.get(i); - sb.append(", ").append(field.getName()).append('=').append(get(field)); + sb.append(", ").append(field.getName()).append('=').append(values[i]); } sb.append('}'); return sb.toString(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 00bfdfdd..c91ce0b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.section.AbstractEncodable; public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { public abstract E resolveKey(FieldKey fieldName); - - public abstract DataType getField(E fieldName); + public abstract boolean hasField(E fieldName); + public abstract Object getFieldValue(E fieldName); public abstract void setFieldValue(E fieldName, Object value); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 6be9b664..51b405cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.time.Instant; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -16,10 +15,9 @@ public final class TcfCaV1CoreSegment extends AbstractBase64Segment Date: Mon, 9 Feb 2026 18:27:29 -0500 Subject: [PATCH 106/146] unify datatype hierarchy --- .../datatype/AbstractEncodableBitStringDataType.java | 8 +++++--- .../java/com/iab/gpp/encoder/datatype/DataType.java | 9 +++++++++ .../gpp/encoder/segment/AbstractBase64Segment.java | 8 ++++---- .../segment/AbstractLazilyEncodableSegment.java | 11 +++++------ .../com/iab/gpp/encoder/segment/UspV1CoreSegment.java | 3 +-- .../datatype/EncodableFixedIntegerRangeTest.java | 1 - .../encoder/datatype/FixedIntegerListEncoderTest.java | 2 -- 7 files changed, 24 insertions(+), 18 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 9ef6b881..768e34d2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -8,16 +8,18 @@ public AbstractEncodableBitStringDataType withValidator(Predicate validato this.validator = validator; return this; } - + + @Override public final void encode(BitString writer, Object[] values, int index) { encode(writer, get(values, index)); } - + protected abstract void encode(BitString writer, T value); + @Override public final void decode(BitString reader, Object[] values, int index) { values[index] = decode(reader); } - + protected abstract T decode(BitString reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 4c9a2569..af80d78e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -3,6 +3,7 @@ import java.util.Collection; import java.util.function.Predicate; import java.util.stream.Collectors; +import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; public abstract class DataType { @@ -35,6 +36,14 @@ public void setDirty(Object[] values, int index, boolean dirty) { // pass } + public void encode(BitString writer, Object[] values, int index) { + throw new UnsupportedOperationException("type does not permit bit string encoding"); + } + + public void decode(BitString reader, Object[] values, int index) { + throw new UnsupportedOperationException("type does not permit bit string decoding"); + } + @SuppressWarnings("unchecked") public final T get(Object[] values, int index) { T value = (T) values[index]; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index abe64edc..ec3b68e6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -3,13 +3,13 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; +import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { +abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment { protected AbstractBase64Segment(FieldNames fieldNames) { super(fieldNames); @@ -24,7 +24,7 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - AbstractEncodableBitStringDataType field = get(i); + DataType field = get(i); if (field != null) { field.encode(bitString, values, i); } else { @@ -41,7 +41,7 @@ protected final void doDecode(CharSequence encodedString) { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - AbstractEncodableBitStringDataType field = get(i); + DataType field = get(i); if (field != null) { try { field.decode(bitString, values, i); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index a06c981d..5788ad36 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -7,7 +7,7 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -abstract class AbstractLazilyEncodableSegment & FieldKey, T extends DataType> extends EncodableSegment { +abstract class AbstractLazilyEncodableSegment & FieldKey> extends EncodableSegment { protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); @@ -37,7 +37,7 @@ public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } - protected final void initialize(E key, T value) { + protected final void initialize(E key, DataType value) { Integer index = fieldNames.getIndex(key); if (index == null) { throw new IllegalArgumentException("invalid key "+ key); @@ -45,12 +45,11 @@ protected final void initialize(E key, T value) { types[index] = value; } - @SuppressWarnings("unchecked") - protected final T get(int index) { - return (T) types[index]; + protected final DataType get(int index) { + return (DataType) types[index]; } - protected final T get(E key) { + protected final DataType get(E key) { Integer index = fieldNames.getIndex(key); if (index != null) { return get(index); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index dfab46f0..018d2d91 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -1,13 +1,12 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.UnencodableCharacter; import com.iab.gpp.encoder.datatype.UnencodableInteger; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.section.UspV1; -public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment> { +public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment { public UspV1CoreSegment() { super(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index 58c2ea26..8d24d925 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index 7a395c21..9a980509 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -6,8 +6,6 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; From 6a11348129c93a4609ae02c93c2030394fe62884 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 10:33:38 -0500 Subject: [PATCH 107/146] migrate to fields --- .../iab/gpp/encoder/datatype/DataType.java | 7 +- .../com/iab/gpp/encoder/field/FieldKey.java | 17 +++- .../com/iab/gpp/encoder/field/FieldNames.java | 8 ++ .../iab/gpp/encoder/field/HeaderV1Field.java | 22 +++-- .../iab/gpp/encoder/field/TcfCaV1Field.java | 69 ++++++++++------ .../iab/gpp/encoder/field/TcfEuV2Field.java | 82 ++++++++++++------- .../com/iab/gpp/encoder/field/UsCaField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsCoField.java | 62 +++++++++----- .../com/iab/gpp/encoder/field/UsCtField.java | 63 +++++++++----- .../com/iab/gpp/encoder/field/UsDeField.java | 67 ++++++++++----- .../com/iab/gpp/encoder/field/UsFlField.java | 52 ++++++++---- .../com/iab/gpp/encoder/field/UsIaField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsMtField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsNatField.java | 72 +++++++++++----- .../com/iab/gpp/encoder/field/UsNeField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsNhField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsNjField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsOrField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsTnField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsTxField.java | 66 ++++++++++----- .../com/iab/gpp/encoder/field/UsUtField.java | 52 ++++++++---- .../com/iab/gpp/encoder/field/UsVaField.java | 49 ++++++++--- .../com/iab/gpp/encoder/field/UspV1Field.java | 24 ++++-- .../segment/AbstractBase64Segment.java | 8 +- .../AbstractLazilyEncodableSegment.java | 38 ++------- .../encoder/segment/HeaderV1CoreSegment.java | 3 - .../encoder/segment/TcfCaV1CoreSegment.java | 17 ---- .../TcfCaV1DisclosedVendorsSegment.java | 2 - .../TcfCaV1PublisherPurposesSegment.java | 21 ----- .../encoder/segment/TcfEuV2CoreSegment.java | 21 +---- .../TcfEuV2PublisherPurposesSegment.java | 21 ----- .../segment/TcfEuV2VendorsAllowedSegment.java | 2 - .../TcfEuV2VendorsDisclosedSegment.java | 2 - .../gpp/encoder/segment/UsCaCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsCaGpcSegment.java | 3 - .../gpp/encoder/segment/UsCoCoreSegment.java | 21 ----- .../gpp/encoder/segment/UsCoGpcSegment.java | 3 - .../gpp/encoder/segment/UsCtCoreSegment.java | 22 ----- .../gpp/encoder/segment/UsCtGpcSegment.java | 3 - .../gpp/encoder/segment/UsDeCoreSegment.java | 25 ------ .../gpp/encoder/segment/UsDeGpcSegment.java | 3 - .../gpp/encoder/segment/UsFlCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsIaCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsIaGpcSegment.java | 3 - .../gpp/encoder/segment/UsMtCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsMtGpcSegment.java | 3 - .../gpp/encoder/segment/UsNatCoreSegment.java | 32 -------- .../gpp/encoder/segment/UsNatGpcSegment.java | 3 - .../gpp/encoder/segment/UsNeCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsNeGpcSegment.java | 3 - .../gpp/encoder/segment/UsNhCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsNhGpcSegment.java | 3 - .../gpp/encoder/segment/UsNjCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsNjGpcSegment.java | 3 - .../gpp/encoder/segment/UsOrCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsOrGpcSegment.java | 3 - .../gpp/encoder/segment/UsTnCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsTnGpcSegment.java | 3 - .../gpp/encoder/segment/UsTxCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsTxGpcSegment.java | 3 - .../gpp/encoder/segment/UsUtCoreSegment.java | 24 ------ .../gpp/encoder/segment/UsVaCoreSegment.java | 22 ----- .../gpp/encoder/segment/UspV1CoreSegment.java | 4 - 63 files changed, 880 insertions(+), 924 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index af80d78e..92cd1e99 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -2,9 +2,12 @@ import java.util.Collection; import java.util.function.Predicate; +import java.util.function.Supplier; import java.util.stream.Collectors; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class DataType { @@ -36,11 +39,11 @@ public void setDirty(Object[] values, int index, boolean dirty) { // pass } - public void encode(BitString writer, Object[] values, int index) { + public & FieldKey> void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { throw new UnsupportedOperationException("type does not permit bit string encoding"); } - public void decode(BitString reader, Object[] values, int index) { + public & FieldKey> void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { throw new UnsupportedOperationException("type does not permit bit string decoding"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index c425bd6d..81297d4e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -1,6 +1,21 @@ package com.iab.gpp.encoder.field; +import java.util.function.Predicate; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.FixedIntegerList; + public interface FieldKey { String getName(); - + DataType getType(); + + public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); + public static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); + public static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { + for (int n : l) { + if (n < 0 || n > 2) { + return false; + } + } + return true; + }); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 69822878..6577d237 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,22 +1,26 @@ package com.iab.gpp.encoder.field; import java.util.LinkedHashMap; +import com.iab.gpp.encoder.datatype.DataType; public final class FieldNames & FieldKey> { private final E[] keys; private final LinkedHashMap map; private final Integer[] indices; + private final DataType[] types; @SafeVarargs FieldNames(E... keys) { this.keys = keys; this.map = new LinkedHashMap<>(); this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; + this.types = new DataType[keys.length]; for (int i = 0; i < keys.length; i++) { E key = keys[i]; this.map.put(key, key); this.indices[key.ordinal()] = i; + this.types[i] = key.getType(); } } @@ -28,6 +32,10 @@ public E get(int i) { return keys[i]; } + public DataType getType(int i) { + return types[i]; + } + public Integer getIndex(E key) { if (key == null) { return null; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 91066c76..48121a1c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -1,14 +1,21 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.section.HeaderV1; + public enum HeaderV1Field implements FieldKey { - ID("Id"), - VERSION("Version"), - SECTION_IDS("SectionIds"); + ID("Id", new EncodableFixedInteger(6, HeaderV1.ID)), + VERSION("Version", new EncodableFixedInteger(6, HeaderV1.VERSION)), + SECTION_IDS("SectionIds", new EncodableFibonacciIntegerRange()); - private String name; + private final String name; + private final DataType type; - HeaderV1Field(String name) { + HeaderV1Field(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -16,6 +23,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( HeaderV1Field.ID, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 6fbe5960..e94ddb56 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -1,37 +1,50 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableDatetime; +import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedString; +import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; +import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; +import com.iab.gpp.encoder.section.TcfCaV1; + public enum TcfCaV1Field implements FieldKey { - VERSION("Version"), - CREATED("Created"), - LAST_UPDATED("LastUpdated"), - CMP_ID("CmpId"), - CMP_VERSION("CmpVersion"), - CONSENT_SCREEN("ConsentScreen"), - CONSENT_LANGUAGE("ConsentLanguage"), - VENDOR_LIST_VERSION("VendorListVersion"), - TCF_POLICY_VERSION("TcfPolicyVersion"), - USE_NON_STANDARD_STACKS("UseNonStandardStacks"), - SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent"), - PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent"), - PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent"), - VENDOR_EXPRESS_CONSENT("VendorExpressConsent"), - VENDOR_IMPLIED_CONSENT("VendorImpliedConsent"), - PUB_RESTRICTIONS("PubRestrictions"), + VERSION("Version", new EncodableFixedInteger(6, TcfCaV1.VERSION)), + CREATED("Created", new EncodableDatetime()), + LAST_UPDATED("LastUpdated", new EncodableDatetime()), + CMP_ID("CmpId", new EncodableFixedInteger(12, 0)), + CMP_VERSION("CmpVersion", new EncodableFixedInteger(12, 0)), + CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger(6, 0)), + CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString(2, "EN")), + VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger(12, 0)), + TCF_POLICY_VERSION("TcfPolicyVersion", new EncodableFixedInteger(6, 2)), + USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean(false)), + SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent", new EncodableFixedBitfield(12)), + PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent", new EncodableFixedBitfield(24)), + PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent", new EncodableFixedBitfield(24)), + VENDOR_EXPRESS_CONSENT("VendorExpressConsent", new EncodableOptimizedFixedRange()), + VENDOR_IMPLIED_CONSENT("VendorImpliedConsent", new EncodableOptimizedFixedRange()), + PUB_RESTRICTIONS("PubRestrictions", new EncodableArrayOfFixedIntegerRanges(6, 2, false)), - PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType"), - PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent"), - PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent"), - NUM_CUSTOM_PURPOSES("NumCustomPurposes"), - CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent"), - CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent"), + PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType", new EncodableFixedInteger(3, 3)), + PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield(24)), + PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield(24)), + NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger(6, 0)), + CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), + CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), - DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType"), - DISCLOSED_VENDORS("DisclosedVendors"); + DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger(3, 1)), + DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange()); - private String name; + private final String name; + private final DataType type; - TcfCaV1Field(String name) { + TcfCaV1Field(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -39,6 +52,10 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } //@formatter:off public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 5150a6db..ee4411e0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,40 +1,55 @@ package com.iab.gpp.encoder.field; +import java.util.function.IntSupplier; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableDatetime; +import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedString; +import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; +import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; +import com.iab.gpp.encoder.section.TcfEuV2; +import com.iab.gpp.encoder.segment.TcfEuV2PublisherPurposesSegment; + public enum TcfEuV2Field implements FieldKey { - VERSION("Version"), - CREATED("Created"), - LAST_UPDATED("LastUpdated"), - CMP_ID("CmpId"), - CMP_VERSION("CmpVersion"), - CONSENT_SCREEN("ConsentScreen"), - CONSENT_LANGUAGE("ConsentLanguage"), - VENDOR_LIST_VERSION("VendorListVersion"), - POLICY_VERSION("PolicyVersion"), - IS_SERVICE_SPECIFIC("IsServiceSpecific"), - USE_NON_STANDARD_STACKS("UseNonStandardStacks"), - SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins"), - PURPOSE_CONSENTS("PurposeConsents"), - PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests"), - PURPOSE_ONE_TREATMENT("PurposeOneTreatment"), - PUBLISHER_COUNTRY_CODE("PublisherCountryCode"), - VENDOR_CONSENTS("VendorConsents"), - VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests"), - PUBLISHER_RESTRICTIONS("PublisherRestrictions"), - PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType"), - PUBLISHER_CONSENTS("PublisherConsents"), - PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests"), - NUM_CUSTOM_PURPOSES("NumCustomPurposes"), - PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents"), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests"), - VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType"), - VENDORS_ALLOWED("VendorsAllowed"), - VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType"), - VENDORS_DISCLOSED("VendorsDisclosed"); + VERSION("Version", new EncodableFixedInteger(6, TcfEuV2.VERSION)), + CREATED("Created", new EncodableDatetime()), + LAST_UPDATED("LastUpdated", new EncodableDatetime()), + CMP_ID("CmpId", new EncodableFixedInteger(12, 0)), + CMP_VERSION("CmpVersion", new EncodableFixedInteger(12, 0)), + CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger(6, 0)), + CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString(2, "EN")), + VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger(12, 0)), + POLICY_VERSION("PolicyVersion", new EncodableFixedInteger(6, 2)), + IS_SERVICE_SPECIFIC("IsServiceSpecific", new EncodableBoolean(false)), + USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean(false)), + SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins", new EncodableFixedBitfield(12)), + PURPOSE_CONSENTS("PurposeConsents", new EncodableFixedBitfield(24)), + PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests", new EncodableFixedBitfield(24)), + PURPOSE_ONE_TREATMENT("PurposeOneTreatment", new EncodableBoolean(false)), + PUBLISHER_COUNTRY_CODE("PublisherCountryCode", new EncodableFixedString(2, "AA")), + VENDOR_CONSENTS("VendorConsents", new EncodableOptimizedFixedRange()), + VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests", new EncodableOptimizedFixedRange()), + PUBLISHER_RESTRICTIONS("PublisherRestrictions", new EncodableArrayOfFixedIntegerRanges(6, 2, false)), + PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType", new EncodableFixedInteger(3, 3)), + PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield(24)), + PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield(24)), + NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger(6, 0)), + PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger(3, 2)), + VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange()), + VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger(3, 1)), + VENDORS_DISCLOSED("VendorsDisclosed", new EncodableOptimizedFixedRange()); - private String name; + private final String name; + private final DataType type; - TcfEuV2Field(String name) { + TcfEuV2Field(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -42,6 +57,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 2dd3a51c..22a26588 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsCa; + public enum UsCaField implements FieldKey { - VERSION("Version"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - SHARING_OPT_OUT_NOTICE("SharingOptOutNotice"), - SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice"), - SALE_OPT_OUT("SaleOptOut"), - SHARING_OPT_OUT("SharingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - PERSONAL_DATA_CONSENTS("PersonalDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsCaField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsCa.VERSION)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT("SharingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 9) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 2) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + PERSONAL_DATA_CONSENTS("PersonalDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsCaField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCaField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index a2366deb..0db47e94 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -1,26 +1,45 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsCo; + public enum UsCoField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsCoField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsCo.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", new EncodableFixedIntegerList(2, 7) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsCoField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -28,6 +47,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCoField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index dd605815..180c2e2a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -1,26 +1,46 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsCt; + public enum UsCtField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsCtField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsCt.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsCtField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -28,6 +48,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCtField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index e8fe98b2..c3c68162 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -1,27 +1,49 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsDe; + public enum UsDeField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsDeField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsDe.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 9) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedIntegerList(2, 5) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsDeField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +51,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsDeField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 170e7ff9..01404196 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -1,23 +1,42 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.section.UsFl; + public enum UsFlField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + VERSION("Version", new EncodableFixedInteger(6, UsFl.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - private String name; + private final String name; + private final DataType type; - UsFlField(String name) { + UsFlField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -25,6 +44,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsFlField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index 3b3bb7cb..cf24cb62 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsIa; + public enum UsIaField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsIaField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsIa.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsIaField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsIaField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 07694812..bd776b28 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsMt; + public enum UsMtField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsMtField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsMt.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsMtField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsMtField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index de9c3822..d418f28a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,31 +1,56 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsNat; + public enum UsNatField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - SHARING_OPT_OUT_NOTICE("SharingOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice"), - SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice"), - SALE_OPT_OUT("SaleOptOut"), - SHARING_OPT_OUT("SharingOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - PERSONAL_DATA_CONSENTS("PersonalDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + VERSION("Version", new EncodableFixedInteger(6, UsNat.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT("SharingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 16) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + PERSONAL_DATA_CONSENTS("PersonalDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); - private String name; + private final String name; + private final DataType type; - UsNatField(String name) { + UsNatField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -33,6 +58,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index a556270d..2b2e8193 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsNe; + public enum UsNeField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsNeField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsNe.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsNeField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNeField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 7247c62e..c803daa3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsNh; + public enum UsNhField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsNhField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsNh.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsNhField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNhField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index d47d15b1..0ad6704d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsNj; + public enum UsNjField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsNjField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsNj.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 10) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 5) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsNjField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNjField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index f2faafa2..b9e180d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsOr; + public enum UsOrField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsOrField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsOr.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 11) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsOrField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsOrField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 09477e53..86a07343 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsTn; + public enum UsTnField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsTnField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsTn.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsTnField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTnField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index f441fe3b..fafff9d5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -1,27 +1,48 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsTx; + public enum UsTxField implements FieldKey { - VERSION("Version"), - PROCESSING_NOTICE("ProcessingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), - - GPC_SEGMENT_TYPE("GpcSegmentType"), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), - GPC("Gpc"); - - private String name; - - UsTxField(String name) { + VERSION("Version", new EncodableFixedInteger(6, UsTx.VERSION)), + PROCESSING_NOTICE("ProcessingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), + GPC("Gpc", new EncodableBoolean(false)); + + private final String name; + private final DataType type; + + UsTxField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -29,6 +50,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTxField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 3f7c3ab3..0abf43de 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -1,23 +1,42 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.section.UsUt; + public enum UsUtField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + VERSION("Version", new EncodableFixedInteger(6, UsUt.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - private String name; + private final String name; + private final DataType type; - UsUtField(String name) { + UsUtField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -25,6 +44,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsUtField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index b6c1fd59..5d8c3462 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -1,22 +1,40 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.section.UsVa; + public enum UsVaField implements FieldKey { - VERSION("Version"), - SHARING_NOTICE("SharingNotice"), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), - SALE_OPT_OUT("SaleOptOut"), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + VERSION("Version", new EncodableFixedInteger(6, UsVa.VERSION)), + SHARING_NOTICE("SharingNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT("SaleOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", + new EncodableFixedIntegerList(2, 8) + .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", + new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", + new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - private String name; + private final String name; + private final DataType type; - UsVaField(String name) { + UsVaField(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -24,6 +42,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsVaField.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index d7a9a96c..e05ab623 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -1,15 +1,22 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.UnencodableCharacter; +import com.iab.gpp.encoder.datatype.UnencodableInteger; +import com.iab.gpp.encoder.section.UspV1; + public enum UspV1Field implements FieldKey { - VERSION("Version"), - NOTICE("Notice"), - OPT_OUT_SALE("OptOutSale"), - LSPA_COVERED("LspaCovered"); + VERSION("Version", new UnencodableInteger(UspV1.VERSION)), + NOTICE("Notice", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))), + OPT_OUT_SALE("OptOutSale", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))), + LSPA_COVERED("LspaCovered", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); - private String name; + private final String name; + private final DataType type; - UspV1Field(String name) { + UspV1Field(String name, DataType type) { this.name = name; + this.type = type; } @Override @@ -17,6 +24,11 @@ public String getName() { return name; } + @Override + public DataType getType() { + return type; + } + //@formatter:off public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UspV1Field.VERSION, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index ec3b68e6..75c967f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -24,9 +24,9 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = get(i); + DataType field = fieldNames.getType(i); if (field != null) { - field.encode(bitString, values, i); + field.encode(bitString, values, i, this); } else { throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); } @@ -41,10 +41,10 @@ protected final void doDecode(CharSequence encodedString) { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = get(i); + DataType field = fieldNames.getType(i); if (field != null) { try { - field.decode(bitString, values, i); + field.decode(bitString, values, i, this); } catch (Exception e) { throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 5788ad36..65eb1f6c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -9,27 +9,13 @@ abstract class AbstractLazilyEncodableSegment & FieldKey> extends EncodableSegment { - protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - protected static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - protected final FieldNames fieldNames; - private final Object[] types; protected final Object[] values; private boolean dirty; protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { this.fieldNames = fieldNames; this.values = new Object[fieldNames.size()]; - // TODO: move to FieldNames - this.types = new Object[fieldNames.size()]; } @Override @@ -37,29 +23,17 @@ public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } - protected final void initialize(E key, DataType value) { - Integer index = fieldNames.getIndex(key); - if (index == null) { - throw new IllegalArgumentException("invalid key "+ key); - } - types[index] = value; - } - - protected final DataType get(int index) { - return (DataType) types[index]; - } - protected final DataType get(E key) { Integer index = fieldNames.getIndex(key); if (index != null) { - return get(index); + return fieldNames.getType(index); } return null; } @Override public final boolean hasField(E key) { - return get(key) != null; + return fieldNames.getIndex(key) != null; } @Override @@ -69,7 +43,7 @@ public final boolean isDirty() { } int size = fieldNames.size(); for (int i = 0; i < size; i++) { - if (get(i).isDirty(values, i)) { + if (fieldNames.getType(i).isDirty(values, i)) { return true; } } @@ -81,7 +55,7 @@ public final void setDirty(boolean dirty) { this.dirty = dirty; int size = fieldNames.size(); for (int i = 0; i < size; i++) { - get(i).setDirty(values, i, dirty); + fieldNames.getType(i).setDirty(values, i, dirty); } } @@ -94,7 +68,7 @@ public final Object getFieldValue(E fieldName) { protected final Object getFieldValueUnsafe(E fieldName) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { - return get(index).get(values, index); + return fieldNames.getType(index).get(values, index); } else { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } @@ -109,7 +83,7 @@ public final void setFieldValue(E fieldName, Object value) { protected final void setFieldValueUnsafe(E fieldName, Object value) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { - get(index).set(values, index, value); + fieldNames.getType(index).set(values, index, value); dirty = true; } else { throw new InvalidFieldException(fieldName + " not found"); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 3e926695..a50f0a81 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -9,9 +9,6 @@ public final class HeaderV1CoreSegment extends AbstractBase64Segment { public UsCaCoreSegment() { super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); - initialize(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); - initialize(UsCaField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SHARING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SHARING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 9) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 2) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCaField.PERSONAL_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCaField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 47813843..a9d8e4a0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -9,9 +9,6 @@ public final class UsCaGpcSegment extends AbstractBase64Segment { public UsCaGpcSegment() { super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); - initialize(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsCaField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 2fdd170c..329c26a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -9,27 +9,6 @@ public final class UsCoCoreSegment extends AbstractBase64Segment { public UsCoCoreSegment() { super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); - initialize(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); - initialize(UsCoField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 7) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCoField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 884e6b0e..ad343874 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -9,9 +9,6 @@ public final class UsCoGpcSegment extends AbstractBase64Segment { public UsCoGpcSegment() { super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); - initialize(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsCoField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index bfda454c..6b58c80a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -9,28 +9,6 @@ public final class UsCtCoreSegment extends AbstractBase64Segment { public UsCtCoreSegment() { super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); - initialize(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); - initialize(UsCtField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsCtField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsCtField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index b6aea217..218e3082 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -9,9 +9,6 @@ public final class UsCtGpcSegment extends AbstractBase64Segment { public UsCtGpcSegment() { super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); - initialize(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsCtField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 45404a78..2bd301bc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -9,31 +9,6 @@ public final class UsDeCoreSegment extends AbstractBase64Segment { public UsDeCoreSegment() { super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); - initialize(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); - initialize(UsDeField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 9) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedIntegerList(2, 5) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsDeField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index f23ae86c..e8557d3d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -9,9 +9,6 @@ public final class UsDeGpcSegment extends AbstractBase64Segment { public UsDeGpcSegment() { super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); - initialize(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsDeField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 315fbdcb..f60992a8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -9,30 +9,6 @@ public final class UsFlCoreSegment extends AbstractBase64Segment { public UsFlCoreSegment() { super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); - initialize(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); - initialize(UsFlField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsFlField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 2e39d723..69c5e93c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -9,30 +9,6 @@ public final class UsIaCoreSegment extends AbstractBase64Segment { public UsIaCoreSegment() { super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); - initialize(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); - initialize(UsIaField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsIaField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 99588b5d..e8dcd7a6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -9,9 +9,6 @@ public final class UsIaGpcSegment extends AbstractBase64Segment { public UsIaGpcSegment() { super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); - initialize(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsIaField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 1a9c8099..128e0ac7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -9,30 +9,6 @@ public final class UsMtCoreSegment extends AbstractBase64Segment { public UsMtCoreSegment() { super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); - initialize(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); - initialize(UsMtField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsMtField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 7caa3f4a..2146b166 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -9,9 +9,6 @@ public final class UsMtGpcSegment extends AbstractBase64Segment { public UsMtGpcSegment() { super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); - initialize(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsMtField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 442fb138..10b81165 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -10,38 +10,6 @@ public final class UsNatCoreSegment extends AbstractBase64Segment { public UsNatCoreSegment() { super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); - initialize(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); - initialize(UsNatField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SHARING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SHARING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 16) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNatField.PERSONAL_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNatField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index f7ab9ba6..7d54a916 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -9,9 +9,6 @@ public final class UsNatGpcSegment extends AbstractBase64Segment { public UsNatGpcSegment() { super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); - initialize(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsNatField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index a1eda150..51ef86f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -9,30 +9,6 @@ public final class UsNeCoreSegment extends AbstractBase64Segment { public UsNeCoreSegment() { super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); - initialize(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); - initialize(UsNeField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNeField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 01456505..f656c321 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -9,9 +9,6 @@ public final class UsNeGpcSegment extends AbstractBase64Segment { public UsNeGpcSegment() { super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); - initialize(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsNeField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 1376ec01..2d4bf1d4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -9,30 +9,6 @@ public final class UsNhCoreSegment extends AbstractBase64Segment { public UsNhCoreSegment() { super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); - initialize(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); - initialize(UsNhField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNhField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 9abeebb8..c7594924 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -9,9 +9,6 @@ public final class UsNhGpcSegment extends AbstractBase64Segment { public UsNhGpcSegment() { super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); - initialize(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsNhField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index f8809920..5329d6f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -9,30 +9,6 @@ public final class UsNjCoreSegment extends AbstractBase64Segment { public UsNjCoreSegment() { super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); - initialize(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); - initialize(UsNjField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 10) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsNjField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index c651e912..32cee7bf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -9,9 +9,6 @@ public final class UsNjGpcSegment extends AbstractBase64Segment { public UsNjGpcSegment() { super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); - initialize(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsNjField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index c06f095d..3b421ffb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -9,30 +9,6 @@ public final class UsOrCoreSegment extends AbstractBase64Segment { public UsOrCoreSegment() { super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); - initialize(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); - initialize(UsOrField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 11) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsOrField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index aaacbc33..422dcd50 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -9,9 +9,6 @@ public final class UsOrGpcSegment extends AbstractBase64Segment { public UsOrGpcSegment() { super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); - initialize(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsOrField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index b4749be5..80d5c955 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -9,30 +9,6 @@ public final class UsTnCoreSegment extends AbstractBase64Segment { public UsTnCoreSegment() { super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); - initialize(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); - initialize(UsTnField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTnField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index 26c63cbe..b7c389d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -9,9 +9,6 @@ public final class UsTnGpcSegment extends AbstractBase64Segment { public UsTnGpcSegment() { super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); - initialize(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsTnField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 93cb427d..37c8a1d4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -9,30 +9,6 @@ public final class UsTxCoreSegment extends AbstractBase64Segment { public UsTxCoreSegment() { super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); - initialize(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); - initialize(UsTxField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsTxField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index bdeff998..d24c7f27 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -9,8 +9,5 @@ public final class UsTxGpcSegment extends AbstractBase64Segment { public UsTxGpcSegment() { super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); - initialize(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - initialize(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - initialize(UsTxField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 7200ca99..1befef19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -9,30 +9,6 @@ public final class UsUtCoreSegment extends AbstractBase64Segment { public UsUtCoreSegment() { super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); - initialize(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); - initialize(UsUtField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsUtField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 57cc14ab..2cf487c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -9,28 +9,6 @@ public final class UsVaCoreSegment extends AbstractBase64Segment { public UsVaCoreSegment() { super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); - initialize(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); - initialize(UsVaField.SHARING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - initialize(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - initialize(UsVaField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 018d2d91..d4c193d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -10,10 +10,6 @@ public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment v == 'Y' || v == 'N' || v == '-'))); - initialize(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); - initialize(UspV1Field.LSPA_COVERED, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); } @Override From 8d87d70b0ce41ef4247c4d8ed1247deef2fa0d5c Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 13:17:30 -0500 Subject: [PATCH 108/146] fix dynamic sizing --- .../java/com/iab/gpp/encoder/GppModel.java | 38 +++++------ .../AbstractDirtyableBitStringDataType.java | 6 +- .../AbstractEncodableBitStringDataType.java | 21 +++--- .../iab/gpp/encoder/datatype/DataType.java | 12 +--- .../EncodableArrayOfFixedIntegerRanges.java | 8 ++- .../encoder/datatype/EncodableBoolean.java | 8 ++- .../encoder/datatype/EncodableDatetime.java | 8 ++- .../datatype/EncodableFibonacciInteger.java | 8 ++- .../EncodableFibonacciIntegerRange.java | 8 ++- .../datatype/EncodableFixedBitfield.java | 8 ++- .../datatype/EncodableFixedInteger.java | 16 +++-- .../datatype/EncodableFixedIntegerList.java | 12 ++-- .../datatype/EncodableFixedIntegerRange.java | 8 ++- .../datatype/EncodableFixedString.java | 8 ++- .../datatype/EncodableFlexibleBitfield.java | 18 ++--- .../EncodableOptimizedFixedRange.java | 8 ++- .../encoder/datatype/UnencodableBoolean.java | 8 ++- .../datatype/UnencodableCharacter.java | 5 +- .../encoder/datatype/UnencodableInteger.java | 4 +- .../com/iab/gpp/encoder/field/FieldKey.java | 2 +- .../com/iab/gpp/encoder/field/FieldNames.java | 9 +-- .../iab/gpp/encoder/field/HeaderV1Field.java | 12 ++-- .../iab/gpp/encoder/field/TcfCaV1Field.java | 54 +++++++-------- .../iab/gpp/encoder/field/TcfEuV2Field.java | 66 +++++++++---------- .../com/iab/gpp/encoder/field/UsCaField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsCoField.java | 35 +++++----- .../com/iab/gpp/encoder/field/UsCtField.java | 36 +++++----- .../com/iab/gpp/encoder/field/UsDeField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsFlField.java | 32 +++++---- .../com/iab/gpp/encoder/field/UsIaField.java | 37 +++++------ .../com/iab/gpp/encoder/field/UsMtField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsNatField.java | 46 +++++++------ .../com/iab/gpp/encoder/field/UsNeField.java | 37 +++++------ .../com/iab/gpp/encoder/field/UsNhField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsNjField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsOrField.java | 38 +++++------ .../com/iab/gpp/encoder/field/UsTnField.java | 37 +++++------ .../com/iab/gpp/encoder/field/UsTxField.java | 37 +++++------ .../com/iab/gpp/encoder/field/UsUtField.java | 31 +++++---- .../com/iab/gpp/encoder/field/UsVaField.java | 29 ++++---- .../com/iab/gpp/encoder/field/UspV1Field.java | 14 ++-- .../segment/AbstractBase64Segment.java | 4 +- .../AbstractLazilyEncodableSegment.java | 10 +-- .../gpp/encoder/segment/EncodableSegment.java | 2 + .../encoder/segment/HeaderV1CoreSegment.java | 3 - .../encoder/segment/TcfCaV1CoreSegment.java | 8 --- .../TcfCaV1DisclosedVendorsSegment.java | 2 - .../TcfCaV1PublisherPurposesSegment.java | 4 -- .../encoder/segment/TcfEuV2CoreSegment.java | 8 --- .../TcfEuV2PublisherPurposesSegment.java | 4 -- .../segment/TcfEuV2VendorsAllowedSegment.java | 2 - .../TcfEuV2VendorsDisclosedSegment.java | 2 - .../gpp/encoder/segment/UsCaCoreSegment.java | 3 - .../gpp/encoder/segment/UsCaGpcSegment.java | 3 - .../gpp/encoder/segment/UsCoCoreSegment.java | 3 - .../gpp/encoder/segment/UsCoGpcSegment.java | 3 - .../gpp/encoder/segment/UsCtCoreSegment.java | 3 - .../gpp/encoder/segment/UsCtGpcSegment.java | 3 - .../gpp/encoder/segment/UsDeCoreSegment.java | 3 - .../gpp/encoder/segment/UsDeGpcSegment.java | 3 - .../gpp/encoder/segment/UsFlCoreSegment.java | 3 - .../gpp/encoder/segment/UsIaCoreSegment.java | 3 - .../gpp/encoder/segment/UsIaGpcSegment.java | 3 - .../gpp/encoder/segment/UsMtCoreSegment.java | 3 - .../gpp/encoder/segment/UsMtGpcSegment.java | 3 - .../gpp/encoder/segment/UsNatCoreSegment.java | 3 - .../gpp/encoder/segment/UsNatGpcSegment.java | 3 - .../gpp/encoder/segment/UsNeCoreSegment.java | 3 - .../gpp/encoder/segment/UsNeGpcSegment.java | 3 - .../gpp/encoder/segment/UsNhCoreSegment.java | 3 - .../gpp/encoder/segment/UsNhGpcSegment.java | 3 - .../gpp/encoder/segment/UsNjCoreSegment.java | 3 - .../EncodableFixedIntegerRangeTest.java | 8 +-- .../EncodableOptimizedFixedRangeTest.java | 16 ++--- .../datatype/FixedIntegerListEncoderTest.java | 4 +- 75 files changed, 502 insertions(+), 589 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index c21c4a9c..491bb6ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -179,79 +179,79 @@ public void clear() { } public TcfCaV1 getTcfCaV1Section() { - return (TcfCaV1) getSection(TcfCaV1.NAME); + return (TcfCaV1) getSection(TcfCaV1.ID); } public TcfEuV2 getTcfEuV2Section() { - return (TcfEuV2) getSection(TcfEuV2.NAME); + return (TcfEuV2) getSection(TcfEuV2.ID); } public UspV1 getUspV1Section() { - return (UspV1) getSection(UspV1.NAME); + return (UspV1) getSection(UspV1.ID); } public UsNat getUsNatSection() { - return (UsNat) getSection(UsNat.NAME); + return (UsNat) getSection(UsNat.ID); } public UsCa getUsCaSection() { - return (UsCa) getSection(UsCa.NAME); + return (UsCa) getSection(UsCa.ID); } public UsVa getUsVaSection() { - return (UsVa) getSection(UsVa.NAME); + return (UsVa) getSection(UsVa.ID); } public UsCo getUsCoSection() { - return (UsCo) getSection(UsCo.NAME); + return (UsCo) getSection(UsCo.ID); } public UsUt getUsUtSection() { - return (UsUt) getSection(UsUt.NAME); + return (UsUt) getSection(UsUt.ID); } public UsCt getUsCtSection() { - return (UsCt) getSection(UsCt.NAME); + return (UsCt) getSection(UsCt.ID); } public UsFl getUsFlSection() { - return (UsFl) getSection(UsFl.NAME); + return (UsFl) getSection(UsFl.ID); } public UsMt getUsMtSection() { - return (UsMt) getSection(UsMt.NAME); + return (UsMt) getSection(UsMt.ID); } public UsOr getUsOrSection() { - return (UsOr) getSection(UsOr.NAME); + return (UsOr) getSection(UsOr.ID); } public UsTx getUsTxSection() { - return (UsTx) getSection(UsTx.NAME); + return (UsTx) getSection(UsTx.ID); } public UsDe getUsDeSection() { - return (UsDe) getSection(UsDe.NAME); + return (UsDe) getSection(UsDe.ID); } public UsIa getUsIaSection() { - return (UsIa) getSection(UsIa.NAME); + return (UsIa) getSection(UsIa.ID); } public UsNe getUsNeSection() { - return (UsNe) getSection(UsNe.NAME); + return (UsNe) getSection(UsNe.ID); } public UsNh getUsNhSection() { - return (UsNh) getSection(UsNh.NAME); + return (UsNh) getSection(UsNh.ID); } public UsNj getUsNjSection() { - return (UsNj) getSection(UsNj.NAME); + return (UsNj) getSection(UsNj.ID); } public UsTn getUsTnSection() { - return (UsTn) getSection(UsTn.NAME); + return (UsTn) getSection(UsTn.ID); } public List getSectionIds() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index 5fdc05f0..24aa5c0b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -1,9 +1,11 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.field.FieldKey; + // This class is used to handle collection types. // It is important that we monitor the collections we return for changes. -public abstract class AbstractDirtyableBitStringDataType - extends AbstractEncodableBitStringDataType { +public abstract class AbstractDirtyableBitStringDataType & FieldKey, T extends Dirtyable> + extends AbstractEncodableBitStringDataType { @Override public boolean isDirty(Object[] values, int index) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 768e34d2..f2cb63d4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -1,25 +1,22 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public abstract class AbstractEncodableBitStringDataType extends DataType { - public AbstractEncodableBitStringDataType withValidator(Predicate validator) { - this.validator = validator; - return this; - } +public abstract class AbstractEncodableBitStringDataType & FieldKey, T> extends DataType { @Override - public final void encode(BitString writer, Object[] values, int index) { - encode(writer, get(values, index)); + public final void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { + encode(writer, get(values, index), segment); } - protected abstract void encode(BitString writer, T value); + protected abstract void encode(BitString writer, T value, EncodableSegment segment); @Override - public final void decode(BitString reader, Object[] values, int index) { - values[index] = decode(reader); + public final void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { + values[index] = decode(reader, segment); } - protected abstract T decode(BitString reader); + protected abstract T decode(BitString reader, EncodableSegment segment); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 92cd1e99..fc7a05aa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -2,22 +2,16 @@ import java.util.Collection; import java.util.function.Predicate; -import java.util.function.Supplier; import java.util.stream.Collectors; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public abstract class DataType { +public abstract class DataType & FieldKey, T> { protected Predicate validator = null; - public DataType withValidator(Predicate validator) { - this.validator = validator; - return this; - } - protected final void validate(T v) { if (validator == null || validator.test(v)) { return; @@ -39,11 +33,11 @@ public void setDirty(Object[] values, int index, boolean dirty) { // pass } - public & FieldKey> void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { + public void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { throw new UnsupportedOperationException("type does not permit bit string encoding"); } - public & FieldKey> void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { + public void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { throw new UnsupportedOperationException("type does not permit bit string decoding"); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index d46c589d..abd43f94 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { +public final class EncodableArrayOfFixedIntegerRanges & FieldKey> extends AbstractDirtyableBitStringDataType> { private final int keyBitStringLength; private final int typeBitStringLength; @@ -22,7 +24,7 @@ protected DirtyableList initialize() { } @Override - protected void encode(BitString sb, DirtyableList entries) { + protected void encode(BitString sb, DirtyableList entries, EncodableSegment segment) { try { sb.writeInt(entries.size(), 12); for (RangeEntry entry : entries) { @@ -36,7 +38,7 @@ protected void encode(BitString sb, DirtyableList entries) { } @Override - protected DirtyableList decode(BitString reader) { + protected DirtyableList decode(BitString reader, EncodableSegment segment) { try { int size = reader.readInt(12); DirtyableList value = initialize(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 08465a8a..5e019b1e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -3,8 +3,10 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableBoolean extends AbstractEncodableBitStringDataType { +public final class EncodableBoolean & FieldKey> extends AbstractEncodableBitStringDataType { private final Boolean initial; @@ -18,7 +20,7 @@ protected Boolean initialize() { } @Override - protected void encode(BitString builder, Boolean value){ + protected void encode(BitString builder, Boolean value, EncodableSegment segment){ try { builder.writeBoolean(value); } catch (Exception e) { @@ -27,7 +29,7 @@ protected void encode(BitString builder, Boolean value){ } @Override - protected Boolean decode(BitString reader) { + protected Boolean decode(BitString reader, EncodableSegment segment) { try { return reader.readBoolean(); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 1977078e..2b1e143a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableDatetime extends AbstractEncodableBitStringDataType { +public final class EncodableDatetime & FieldKey> extends AbstractEncodableBitStringDataType { @Override protected Instant initialize() { @@ -14,7 +16,7 @@ protected Instant initialize() { } @Override - protected void encode(BitString builder, Instant value) { + protected void encode(BitString builder, Instant value, EncodableSegment segment) { try { DatetimeEncoder.encode(builder, value); } catch (Exception e) { @@ -23,7 +25,7 @@ protected void encode(BitString builder, Instant value) { } @Override - protected Instant decode(BitString reader) { + protected Instant decode(BitString reader, EncodableSegment segment) { try { return DatetimeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 74a327a3..c0677d9a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -3,8 +3,10 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFibonacciInteger extends AbstractEncodableBitStringDataType { +public final class EncodableFibonacciInteger & FieldKey> extends AbstractEncodableBitStringDataType { private final Integer initial; @@ -18,7 +20,7 @@ protected Integer initialize() { } @Override - protected void encode(BitString builder, Integer value) { + protected void encode(BitString builder, Integer value, EncodableSegment segment) { try { builder.writeFibonacci(value); } catch (Exception e) { @@ -27,7 +29,7 @@ protected void encode(BitString builder, Integer value) { } @Override - protected Integer decode(BitString reader) { + protected Integer decode(BitString reader, EncodableSegment segment) { try { return reader.readFibonacci(); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 96987231..f56780ad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitStringDataType { +public final class EncodableFibonacciIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { @Override public IntegerSet initialize() { @@ -14,7 +16,7 @@ public IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { FibonacciIntegerRangeEncoder.encode(builder, value); } catch (Exception e) { @@ -23,7 +25,7 @@ protected void encode(BitString builder, IntegerSet value) { } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { return FibonacciIntegerRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index db2d531e..862c5478 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedBitfield extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { private final int numElements; @@ -20,7 +22,7 @@ protected IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { FixedBitfieldEncoder.encode(builder, value, this.numElements); } catch (Exception e) { @@ -29,7 +31,7 @@ protected void encode(BitString builder, IntegerSet value) { } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { return reader.readIntegerSet(this.numElements); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 865e4988..6d075cd5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,17 +1,25 @@ package com.iab.gpp.encoder.datatype; +import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedInteger extends AbstractEncodableBitStringDataType { +public final class EncodableFixedInteger & FieldKey> extends AbstractEncodableBitStringDataType { private final int bitStringLength; private final Integer initial; - public EncodableFixedInteger(int bitStringLength, Integer initial) { + public EncodableFixedInteger(int bitStringLength, Integer initial, Predicate validator) { this.bitStringLength = bitStringLength; this.initial = initial; + this.validator = validator; + } + + public EncodableFixedInteger(int bitStringLength, Integer initial) { + this(bitStringLength, initial, null); } @Override @@ -20,7 +28,7 @@ protected Integer initialize() { } @Override - protected void encode(BitString builder, Integer value) { + protected void encode(BitString builder, Integer value, EncodableSegment segment) { try { builder.writeInt(value, this.bitStringLength); } catch (Exception e) { @@ -29,7 +37,7 @@ protected void encode(BitString builder, Integer value) { } @Override - protected Integer decode(BitString reader) { + protected Integer decode(BitString reader, EncodableSegment segment) { try { return IntegerCache.valueOf(reader.readInt(bitStringLength)); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 11ff574b..cb840d81 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,19 +1,23 @@ package com.iab.gpp.encoder.datatype; import java.util.List; +import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedIntegerList & FieldKey> extends AbstractDirtyableBitStringDataType { private final int elementBitStringLength; private final int numElements; - public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { + public EncodableFixedIntegerList(int elementBitStringLength, int numElements, Predicate validator) { this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; + this.validator = validator; } @Override @@ -22,7 +26,7 @@ protected FixedIntegerList initialize() { } @Override - protected void encode(BitString builder, FixedIntegerList value) { + protected void encode(BitString builder, FixedIntegerList value, EncodableSegment segment) { try { FixedIntegerListEncoder.encode(builder, value, this.elementBitStringLength, this.numElements); } catch (Exception e) { @@ -31,7 +35,7 @@ protected void encode(BitString builder, FixedIntegerList value) { } @Override - protected FixedIntegerList decode(BitString reader) { + protected FixedIntegerList decode(BitString reader, EncodableSegment segment) { try { return reader.readFixedIntegerList(elementBitStringLength, numElements); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index c1aeee48..5875f827 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -5,8 +5,10 @@ import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedIntegerRange extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { @Override protected IntegerSet initialize() { @@ -14,7 +16,7 @@ protected IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { FixedIntegerRangeEncoder.encode(builder, value); } catch (Exception e) { @@ -23,7 +25,7 @@ protected void encode(BitString builder, IntegerSet value) { } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { return FixedIntegerRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 1d4ac2de..38d2d4bb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -4,8 +4,10 @@ import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedString extends AbstractEncodableBitStringDataType { +public final class EncodableFixedString & FieldKey> extends AbstractEncodableBitStringDataType { private final int stringLength; private final String initial; @@ -21,7 +23,7 @@ protected String initialize() { } @Override - protected void encode(BitString builder, String value) { + protected void encode(BitString builder, String value, EncodableSegment segment) { try { FixedStringEncoder.encode(builder, value, this.stringLength); } catch (Exception e) { @@ -30,7 +32,7 @@ protected void encode(BitString builder, String value) { } @Override - protected String decode(BitString reader) { + protected String decode(BitString reader, EncodableSegment segment) { try { return FixedStringEncoder.decode(reader, this.stringLength); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 7dddb9c4..b8842528 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -1,17 +1,19 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import java.util.function.IntSupplier; +import java.util.function.ToIntFunction; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringDataType { +public final class EncodableFlexibleBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { - private final IntSupplier getLengthSupplier; + private final ToIntFunction> getLengthSupplier; - public EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { + public EncodableFlexibleBitfield(ToIntFunction> getLengthSupplier) { this.getLengthSupplier = getLengthSupplier; } @@ -21,18 +23,18 @@ protected IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { - FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.getAsInt()); + FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.applyAsInt(segment)); } catch (Exception e) { throw new EncodingException(e); } } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { - return reader.readIntegerSet(getLengthSupplier.getAsInt()); + return reader.readIntegerSet(getLengthSupplier.applyAsInt(segment)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 6e51a002..8ef5dd8c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -5,9 +5,11 @@ import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStringDataType { +public final class EncodableOptimizedFixedRange & FieldKey> extends AbstractDirtyableBitStringDataType { @Override protected IntegerSet initialize() { @@ -15,7 +17,7 @@ protected IntegerSet initialize() { } @Override - protected void encode(BitString builder, IntegerSet value) { + protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { OptimizedFixedRangeEncoder.encode(builder, value); } catch (Exception e) { @@ -24,7 +26,7 @@ protected void encode(BitString builder, IntegerSet value) { } @Override - protected IntegerSet decode(BitString reader) { + protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { return OptimizedFixedRangeEncoder.decode(reader); } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index b641fcb1..791bd05a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -1,8 +1,10 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; -public final class UnencodableBoolean extends AbstractEncodableBitStringDataType { +public final class UnencodableBoolean & FieldKey> extends AbstractEncodableBitStringDataType { private final Boolean initial; @@ -16,12 +18,12 @@ protected Boolean initialize() { } @Override - protected void encode(BitString writer, Boolean value) { + protected void encode(BitString writer, Boolean value, EncodableSegment segment) { // pass } @Override - protected Boolean decode(BitString reader) { + protected Boolean decode(BitString reader, EncodableSegment segment) { return Boolean.FALSE; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index ee9cc941..04eb4a3a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -1,14 +1,15 @@ package com.iab.gpp.encoder.datatype; import java.util.function.Predicate; +import com.iab.gpp.encoder.field.FieldKey; -public final class UnencodableCharacter extends DataType { +public final class UnencodableCharacter & FieldKey> extends DataType { private final Character initial; public UnencodableCharacter(Character initial, Predicate validator) { this.initial = initial; - withValidator(validator); + this.validator = validator; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index 17c9876d..a6d5f1b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -1,6 +1,8 @@ package com.iab.gpp.encoder.datatype; -public final class UnencodableInteger extends DataType { +import com.iab.gpp.encoder.field.FieldKey; + +public final class UnencodableInteger & FieldKey> extends DataType { private final Integer initial; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 81297d4e..78b143f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -6,7 +6,7 @@ public interface FieldKey { String getName(); - DataType getType(); + DataType getType(); public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); public static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 6577d237..3b338e0b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -8,14 +8,14 @@ public final class FieldNames & FieldKey> { private final E[] keys; private final LinkedHashMap map; private final Integer[] indices; - private final DataType[] types; + private final Object[] types; @SafeVarargs FieldNames(E... keys) { this.keys = keys; this.map = new LinkedHashMap<>(); this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; - this.types = new DataType[keys.length]; + this.types = new Object[keys.length]; for (int i = 0; i < keys.length; i++) { E key = keys[i]; this.map.put(key, key); @@ -32,8 +32,9 @@ public E get(int i) { return keys[i]; } - public DataType getType(int i) { - return types[i]; + @SuppressWarnings("unchecked") + public DataType getType(int i) { + return (DataType) types[i]; } public Integer getIndex(E key) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 48121a1c..2ce3cf26 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -6,14 +6,14 @@ import com.iab.gpp.encoder.section.HeaderV1; public enum HeaderV1Field implements FieldKey { - ID("Id", new EncodableFixedInteger(6, HeaderV1.ID)), - VERSION("Version", new EncodableFixedInteger(6, HeaderV1.VERSION)), - SECTION_IDS("SectionIds", new EncodableFibonacciIntegerRange()); + ID("Id", new EncodableFixedInteger<>(6, HeaderV1.ID)), + VERSION("Version", new EncodableFixedInteger<>(6, HeaderV1.VERSION)), + SECTION_IDS("SectionIds", new EncodableFibonacciIntegerRange<>()); private final String name; - private final DataType type; + private final DataType type; - HeaderV1Field(String name, DataType type) { + HeaderV1Field(String name, DataType type) { this.name = name; this.type = type; } @@ -24,7 +24,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index e94ddb56..32628858 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -12,37 +12,37 @@ import com.iab.gpp.encoder.section.TcfCaV1; public enum TcfCaV1Field implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, TcfCaV1.VERSION)), - CREATED("Created", new EncodableDatetime()), - LAST_UPDATED("LastUpdated", new EncodableDatetime()), - CMP_ID("CmpId", new EncodableFixedInteger(12, 0)), - CMP_VERSION("CmpVersion", new EncodableFixedInteger(12, 0)), - CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger(6, 0)), - CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString(2, "EN")), - VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger(12, 0)), - TCF_POLICY_VERSION("TcfPolicyVersion", new EncodableFixedInteger(6, 2)), - USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean(false)), - SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent", new EncodableFixedBitfield(12)), - PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent", new EncodableFixedBitfield(24)), - PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent", new EncodableFixedBitfield(24)), - VENDOR_EXPRESS_CONSENT("VendorExpressConsent", new EncodableOptimizedFixedRange()), - VENDOR_IMPLIED_CONSENT("VendorImpliedConsent", new EncodableOptimizedFixedRange()), - PUB_RESTRICTIONS("PubRestrictions", new EncodableArrayOfFixedIntegerRanges(6, 2, false)), + VERSION("Version", new EncodableFixedInteger<>(6, TcfCaV1.VERSION)), + CREATED("Created", new EncodableDatetime<>()), + LAST_UPDATED("LastUpdated", new EncodableDatetime<>()), + CMP_ID("CmpId", new EncodableFixedInteger<>(12, 0)), + CMP_VERSION("CmpVersion", new EncodableFixedInteger<>(12, 0)), + CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger<>(6, 0)), + CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString<>(2, "EN")), + VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger<>(12, 0)), + TCF_POLICY_VERSION("TcfPolicyVersion", new EncodableFixedInteger<>(6, 2)), + USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean<>(false)), + SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent", new EncodableFixedBitfield<>(12)), + PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent", new EncodableFixedBitfield<>(24)), + PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent", new EncodableFixedBitfield<>(24)), + VENDOR_EXPRESS_CONSENT("VendorExpressConsent", new EncodableOptimizedFixedRange<>()), + VENDOR_IMPLIED_CONSENT("VendorImpliedConsent", new EncodableOptimizedFixedRange<>()), + PUB_RESTRICTIONS("PubRestrictions", new EncodableArrayOfFixedIntegerRanges<>(6, 2, false)), - PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType", new EncodableFixedInteger(3, 3)), - PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield(24)), - PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield(24)), - NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger(6, 0)), - CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), - CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), + PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType", new EncodableFixedInteger<>(3, 3)), + PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield<>(24)), + PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield<>(24)), + NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), + CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), + CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), - DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger(3, 1)), - DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange()); + DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger<>(3, 1)), + DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange<>()); private final String name; - private final DataType type; + private final DataType type; - TcfCaV1Field(String name, DataType type) { + TcfCaV1Field(String name, DataType type) { this.name = name; this.type = type; } @@ -53,7 +53,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } //@formatter:off diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index ee4411e0..0d383908 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.field; -import java.util.function.IntSupplier; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; @@ -11,43 +10,42 @@ import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.section.TcfEuV2; -import com.iab.gpp.encoder.segment.TcfEuV2PublisherPurposesSegment; public enum TcfEuV2Field implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, TcfEuV2.VERSION)), - CREATED("Created", new EncodableDatetime()), - LAST_UPDATED("LastUpdated", new EncodableDatetime()), - CMP_ID("CmpId", new EncodableFixedInteger(12, 0)), - CMP_VERSION("CmpVersion", new EncodableFixedInteger(12, 0)), - CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger(6, 0)), - CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString(2, "EN")), - VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger(12, 0)), - POLICY_VERSION("PolicyVersion", new EncodableFixedInteger(6, 2)), - IS_SERVICE_SPECIFIC("IsServiceSpecific", new EncodableBoolean(false)), - USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean(false)), - SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins", new EncodableFixedBitfield(12)), - PURPOSE_CONSENTS("PurposeConsents", new EncodableFixedBitfield(24)), - PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests", new EncodableFixedBitfield(24)), - PURPOSE_ONE_TREATMENT("PurposeOneTreatment", new EncodableBoolean(false)), - PUBLISHER_COUNTRY_CODE("PublisherCountryCode", new EncodableFixedString(2, "AA")), - VENDOR_CONSENTS("VendorConsents", new EncodableOptimizedFixedRange()), - VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests", new EncodableOptimizedFixedRange()), - PUBLISHER_RESTRICTIONS("PublisherRestrictions", new EncodableArrayOfFixedIntegerRanges(6, 2, false)), - PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType", new EncodableFixedInteger(3, 3)), - PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield(24)), - PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield(24)), - NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger(6, 0)), - PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), - VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger(3, 2)), - VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange()), - VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger(3, 1)), - VENDORS_DISCLOSED("VendorsDisclosed", new EncodableOptimizedFixedRange()); + VERSION("Version", new EncodableFixedInteger<>(6, TcfEuV2.VERSION)), + CREATED("Created", new EncodableDatetime<>()), + LAST_UPDATED("LastUpdated", new EncodableDatetime<>()), + CMP_ID("CmpId", new EncodableFixedInteger<>(12, 0)), + CMP_VERSION("CmpVersion", new EncodableFixedInteger<>(12, 0)), + CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger<>(6, 0)), + CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString<>(2, "EN")), + VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger<>(12, 0)), + POLICY_VERSION("PolicyVersion", new EncodableFixedInteger<>(6, 2)), + IS_SERVICE_SPECIFIC("IsServiceSpecific", new EncodableBoolean<>(false)), + USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean<>(false)), + SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins", new EncodableFixedBitfield<>(12)), + PURPOSE_CONSENTS("PurposeConsents", new EncodableFixedBitfield<>(24)), + PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests", new EncodableFixedBitfield<>(24)), + PURPOSE_ONE_TREATMENT("PurposeOneTreatment", new EncodableBoolean<>(false)), + PUBLISHER_COUNTRY_CODE("PublisherCountryCode", new EncodableFixedString<>(2, "AA")), + VENDOR_CONSENTS("VendorConsents", new EncodableOptimizedFixedRange<>()), + VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests", new EncodableOptimizedFixedRange<>()), + PUBLISHER_RESTRICTIONS("PublisherRestrictions", new EncodableArrayOfFixedIntegerRanges<>(6, 2, false)), + PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType", new EncodableFixedInteger<>(3, 3)), + PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield<>(24)), + PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield<>(24)), + NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), + PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger<>(3, 2)), + VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange<>()), + VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger<>(3, 1)), + VENDORS_DISCLOSED("VendorsDisclosed", new EncodableOptimizedFixedRange<>()); private final String name; - private final DataType type; + private final DataType type; - TcfEuV2Field(String name, DataType type) { + TcfEuV2Field(String name, DataType type) { this.name = name; this.type = type; } @@ -58,7 +56,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 22a26588..3c2329e0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsCa; public enum UsCaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsCa.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsCa.VERSION)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SHARING_OPT_OUT("SharingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 9) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 2) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 9, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 2, nullableBooleanAsTwoBitIntegerListValidator)), PERSONAL_DATA_CONSENTS("PersonalDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsCaField(String name, DataType type) { + UsCaField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 0db47e94..e04cdb4c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -8,36 +8,35 @@ import com.iab.gpp.encoder.section.UsCo; public enum UsCoField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsCo.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsCo.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", new EncodableFixedIntegerList(2, 7) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", new EncodableFixedIntegerList<>(2, 7, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsCoField(String name, DataType type) { + UsCoField(String name, DataType type) { this.name = name; this.type = type; } @@ -48,7 +47,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 180c2e2a..58990ea5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -8,37 +8,35 @@ import com.iab.gpp.encoder.section.UsCt; public enum UsCtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsCt.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsCt.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsCtField(String name, DataType type) { + UsCtField(String name, DataType type) { this.name = name; this.type = type; } @@ -49,7 +47,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index c3c68162..3c768a13 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -8,40 +8,38 @@ import com.iab.gpp.encoder.section.UsDe; public enum UsDeField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsDe.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsDe.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 9) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 9, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedIntegerList(2, 5) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 5, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsDeField(String name, DataType type) { + UsDeField(String name, DataType type) { this.name = name; this.type = type; } @@ -52,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 01404196..94c26276 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -6,35 +6,33 @@ import com.iab.gpp.encoder.section.UsFl; public enum UsFlField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsFl.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsFl.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); private final String name; - private final DataType type; + private final DataType type; - UsFlField(String name, DataType type) { + UsFlField(String name, DataType type) { this.name = name; this.type = type; } @@ -45,7 +43,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index cf24cb62..f15b6157 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -8,39 +8,38 @@ import com.iab.gpp.encoder.section.UsIa; public enum UsIaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsIa.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsIa.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsIaField(String name, DataType type) { + UsIaField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index bd776b28..012fb72d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsMt; public enum UsMtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsMt.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsMt.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsMtField(String name, DataType type) { + UsMtField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index d418f28a..7bffab80 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -8,47 +8,45 @@ import com.iab.gpp.encoder.section.UsNat; public enum UsNatField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsNat.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsNat.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SHARING_OPT_OUT("SharingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 16) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 16, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), PERSONAL_DATA_CONSENTS("PersonalDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsNatField(String name, DataType type) { + UsNatField(String name, DataType type) { this.name = name; this.type = type; } @@ -59,7 +57,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 2b2e8193..750bffae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -8,39 +8,38 @@ import com.iab.gpp.encoder.section.UsNe; public enum UsNeField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsNe.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsNe.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsNeField(String name, DataType type) { + UsNeField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index c803daa3..26a5b198 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsNh; public enum UsNhField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsNh.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsNh.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsNhField(String name, DataType type) { + UsNhField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 0ad6704d..24e94a2d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsNj; public enum UsNjField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsNj.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsNj.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 10) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 5) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 10, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 5, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsNjField(String name, DataType type) { + UsNjField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index b9e180d1..16df94f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -8,39 +8,37 @@ import com.iab.gpp.encoder.section.UsOr; public enum UsOrField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsOr.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsOr.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 11) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList(2, 3) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 11, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsOrField(String name, DataType type) { + UsOrField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +49,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 86a07343..4742a86f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -8,39 +8,38 @@ import com.iab.gpp.encoder.section.UsTn; public enum UsTnField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsTn.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsTn.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsTnField(String name, DataType type) { + UsTnField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index fafff9d5..d571a463 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -8,39 +8,38 @@ import com.iab.gpp.encoder.section.UsTx; public enum UsTxField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsTx.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsTx.VERSION)), PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean(true)), - GPC("Gpc", new EncodableBoolean(false)); + GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), + GPC("Gpc", new EncodableBoolean<>(false)); private final String name; - private final DataType type; + private final DataType type; - UsTxField(String name, DataType type) { + UsTxField(String name, DataType type) { this.name = name; this.type = type; } @@ -51,7 +50,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 0abf43de..101f80ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -6,35 +6,34 @@ import com.iab.gpp.encoder.section.UsUt; public enum UsUtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsUt.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsUt.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); private final String name; - private final DataType type; + private final DataType type; - UsUtField(String name, DataType type) { + UsUtField(String name, DataType type) { this.name = name; this.type = type; } @@ -45,7 +44,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 5d8c3462..626de774 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -6,33 +6,32 @@ import com.iab.gpp.encoder.section.UsVa; public enum UsVaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger(6, UsVa.VERSION)), + VERSION("Version", new EncodableFixedInteger<>(6, UsVa.VERSION)), SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList(2, 8) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); private final String name; - private final DataType type; + private final DataType type; - UsVaField(String name, DataType type) { + UsVaField(String name, DataType type) { this.name = name; this.type = type; } @@ -43,7 +42,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index e05ab623..cacb12c0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -6,15 +6,15 @@ import com.iab.gpp.encoder.section.UspV1; public enum UspV1Field implements FieldKey { - VERSION("Version", new UnencodableInteger(UspV1.VERSION)), - NOTICE("Notice", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))), - OPT_OUT_SALE("OptOutSale", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))), - LSPA_COVERED("LspaCovered", new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + VERSION("Version", new UnencodableInteger<>(UspV1.VERSION)), + NOTICE("Notice", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))), + OPT_OUT_SALE("OptOutSale", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))), + LSPA_COVERED("LspaCovered", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))); private final String name; - private final DataType type; + private final DataType type; - UspV1Field(String name, DataType type) { + UspV1Field(String name, DataType type) { this.name = name; this.type = type; } @@ -25,7 +25,7 @@ public String getName() { } @Override - public DataType getType() { + public DataType getType() { return type; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 75c967f0..414a2254 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -24,7 +24,7 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = fieldNames.getType(i); + DataType field = fieldNames.getType(i); if (field != null) { field.encode(bitString, values, i, this); } else { @@ -41,7 +41,7 @@ protected final void doDecode(CharSequence encodedString) { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = fieldNames.getType(i); + DataType field = fieldNames.getType(i); if (field != null) { try { field.decode(bitString, values, i, this); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 65eb1f6c..3fbf06c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.segment; -import java.util.function.Predicate; import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; @@ -23,7 +21,7 @@ public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } - protected final DataType get(E key) { + protected final DataType get(E key) { Integer index = fieldNames.getIndex(key); if (index != null) { return fieldNames.getType(index); @@ -64,8 +62,10 @@ public final Object getFieldValue(E fieldName) { ensureDecode(); return getFieldValueUnsafe(fieldName); } - - protected final Object getFieldValueUnsafe(E fieldName) { + + // TODO: try to hide this + @Override + public final Object getFieldValueUnsafe(E fieldName) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { return fieldNames.getType(index).get(values, index); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index c91ce0b4..d96424d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -9,6 +9,8 @@ public abstract class EncodableSegment & FieldKey> extends Abs public abstract boolean hasField(E fieldName); public abstract Object getFieldValue(E fieldName); + + public abstract Object getFieldValueUnsafe(E fieldName); public abstract void setFieldValue(E fieldName, Object value); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index a50f0a81..3ed42bc1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.field.HeaderV1Field; -import com.iab.gpp.encoder.section.HeaderV1; public final class HeaderV1CoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index cb9c5907..bfebcccb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,14 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableDatetime; -import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedString; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfCaV1Field; -import com.iab.gpp.encoder.section.TcfCaV1; public final class TcfCaV1CoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 6d398f78..277a33e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfCaV1Field; public final class TcfCaV1DisclosedVendorsSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 7b58567d..9f690cb2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -1,9 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.function.IntSupplier; -import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; import com.iab.gpp.encoder.field.TcfCaV1Field; public final class TcfCaV1PublisherPurposesSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 3df0dd92..98aa2a04 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -2,15 +2,7 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableDatetime; -import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedString; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfEuV2Field; -import com.iab.gpp.encoder.section.TcfEuV2; public final class TcfEuV2CoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 11c0b499..4865fcaf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -1,11 +1,7 @@ package com.iab.gpp.encoder.segment; -import java.util.function.IntSupplier; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; import com.iab.gpp.encoder.field.TcfEuV2Field; public final class TcfEuV2PublisherPurposesSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 91667df1..71c0ba33 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -2,8 +2,6 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfEuV2Field; public final class TcfEuV2VendorsAllowedSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index da8afda2..d34f267d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -2,8 +2,6 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfEuV2Field; public final class TcfEuV2VendorsDisclosedSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 5512a52e..0d625b8d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; -import com.iab.gpp.encoder.section.UsCa; public final class UsCaCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index a9d8e4a0..c7f28646 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsCaField; public final class UsCaGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 329c26a2..661393a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; -import com.iab.gpp.encoder.section.UsCo; public final class UsCoCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index ad343874..3b50ea42 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsCoField; public final class UsCoGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index 6b58c80a..9414e8fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; -import com.iab.gpp.encoder.section.UsCt; public final class UsCtCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index 218e3082..5ddc9577 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsCtField; public final class UsCtGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 2bd301bc..ba3dcb1e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; -import com.iab.gpp.encoder.section.UsDe; public final class UsDeCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index e8557d3d..07659530 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsDeField; public final class UsDeGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index f60992a8..06353278 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; -import com.iab.gpp.encoder.section.UsFl; public final class UsFlCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 69c5e93c..fd658faf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; -import com.iab.gpp.encoder.section.UsIa; public final class UsIaCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index e8dcd7a6..766eb006 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsIaField; public final class UsIaGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 128e0ac7..f5110ea6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; -import com.iab.gpp.encoder.section.UsMt; public final class UsMtCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 2146b166..9df22421 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsMtField; public final class UsMtGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 10b81165..b4d7523b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; -import com.iab.gpp.encoder.section.UsNat; public final class UsNatCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 7d54a916..1fb591cc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsNatField; public final class UsNatGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index 51ef86f9..c593421a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; -import com.iab.gpp.encoder.section.UsNe; public final class UsNeCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index f656c321..2eae46ba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsNeField; public final class UsNeGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 2d4bf1d4..9a801e7f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; -import com.iab.gpp.encoder.section.UsNh; public final class UsNhCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index c7594924..8876ba1b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsNhField; public final class UsNhGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 5329d6f5..d4de4f4f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; -import com.iab.gpp.encoder.section.UsNj; public final class UsNjCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index 8d24d925..ef321d4c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -16,7 +16,7 @@ public void testEncode1() throws EncodingException { IntegerSet integerSet = new IntegerSet(); integerSet.add(28); BitString builder = new BitString(); - encodableFixedIntegerRange.encode(builder, integerSet); + encodableFixedIntegerRange.encode(builder, integerSet, null); Assertions.assertEquals("00000000000100000000000011100", builder.toString()); } @@ -26,20 +26,20 @@ public void testEncode2() throws EncodingException { IntegerSet integerSet = new IntegerSet(); integerSet.add(29); BitString builder = new BitString(); - encodableFixedIntegerRange.encode(builder, integerSet); + encodableFixedIntegerRange.encode(builder, integerSet, null); Assertions.assertEquals("00000000000100000000000011101", builder.toString()); } @Test public void testDecode1() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"))); + Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); } @Test public void testDecode2() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"))); + Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 6ca5f6b8..8199a47d 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -16,7 +16,7 @@ public void testEncode1() { IntegerSet integerSet = new IntegerSet(); integerSet.addAll(Arrays.asList(12, 24, 48)); BitString builder = new BitString(); - encodableOptimizedFixedRange.encode(builder, integerSet); + encodableOptimizedFixedRange.encode(builder, integerSet, null); Assertions.assertEquals("00000000001100000000000000001000000000001000000000000000000000001", builder.toString()); } @@ -26,7 +26,7 @@ public void testEncode2() { IntegerSet integerSet = new IntegerSet(); integerSet.addAll(Arrays.asList(18, 30)); BitString builder = new BitString(); - encodableOptimizedFixedRange.encode(builder, integerSet); + encodableOptimizedFixedRange.encode(builder, integerSet, null); Assertions.assertEquals("00000000000111100000000000000000001000000000001", builder.toString()); } @@ -35,7 +35,7 @@ public void testEncode3() { IntegerSet integerSet = new IntegerSet(); integerSet.addAll(Arrays.asList(28)); BitString builder = new BitString(); - encodableOptimizedFixedRange.encode(builder, integerSet); + encodableOptimizedFixedRange.encode(builder, integerSet, null); Assertions.assertEquals("000000000001110000000000000000000000000000001", builder.toString()); } @@ -44,27 +44,27 @@ public void testEncode4() { IntegerSet integerSet = new IntegerSet(); integerSet.addAll(Arrays.asList(29)); BitString builder = new BitString(); - encodableOptimizedFixedRange.encode(builder, integerSet); + encodableOptimizedFixedRange.encode(builder, integerSet, null); Assertions.assertEquals("0000000000011101100000000000100000000000011101", builder.toString()); } @Test public void testDecode1() { - Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"))); + Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"), null)); } @Test public void testDecode2() { - Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001"))); + Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001"), null)); } @Test public void testDecode3() { - Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001"))); + Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001"), null)); } @Test public void testDecode4() { - Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101"))); + Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101"), null)); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index 9a980509..99ef930f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -150,8 +150,8 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2); - return encodable.decode(BitString.of(str)); + EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2, null); + return encodable.decode(BitString.of(str), null); } @Test From 10bd6a405bf65fda250cae4c2b9ccbdddf376564 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 13:24:21 -0500 Subject: [PATCH 109/146] fix tests and cleanup --- .../java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsOrCoreSegment.java | 3 --- .../java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsTnCoreSegment.java | 3 --- .../java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsTxCoreSegment.java | 3 --- .../java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsUtCoreSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UsVaCoreSegment.java | 3 --- .../com/iab/gpp/encoder/segment/UspV1CoreSegment.java | 3 --- .../encoder/datatype/EncodableFixedIntegerRangeTest.java | 9 +++++---- .../datatype/EncodableOptimizedFixedRangeTest.java | 3 ++- .../encoder/datatype/FixedIntegerListEncoderTest.java | 3 ++- .../datatype/encoder/FixedIntegerEncoderTest.java | 5 ----- .../encoder/datatype/encoder/FixedLongEncoderTest.java | 5 ----- 15 files changed, 9 insertions(+), 46 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 32cee7bf..badf504a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsNjField; public final class UsNjGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index 3b421ffb..68fe7067 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; -import com.iab.gpp.encoder.section.UsOr; public final class UsOrCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 422dcd50..3ea74179 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsOrField; public final class UsOrGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index 80d5c955..af7696db 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; -import com.iab.gpp.encoder.section.UsTn; public final class UsTnCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index b7c389d8..8e8eebee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsTnField; public final class UsTnGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 37c8a1d4..b2dd047b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; -import com.iab.gpp.encoder.section.UsTx; public final class UsTxCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index d24c7f27..e64141c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -1,8 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.UnencodableBoolean; import com.iab.gpp.encoder.field.UsTxField; public final class UsTxGpcSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 1befef19..3d5b91f3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; -import com.iab.gpp.encoder.section.UsUt; public final class UsUtCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 2cf487c9..dea92e45 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -1,9 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; -import com.iab.gpp.encoder.section.UsVa; public final class UsVaCoreSegment extends AbstractBase64Segment { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index d4c193d7..4e952a93 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.UnencodableCharacter; -import com.iab.gpp.encoder.datatype.UnencodableInteger; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.UspV1Field; -import com.iab.gpp.encoder.section.UspV1; public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index ef321d4c..a9c163f2 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -7,12 +7,13 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.UsNatField; public class EncodableFixedIntegerRangeTest { @Test public void testEncode1() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); IntegerSet integerSet = new IntegerSet(); integerSet.add(28); BitString builder = new BitString(); @@ -22,7 +23,7 @@ public void testEncode1() throws EncodingException { @Test public void testEncode2() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); IntegerSet integerSet = new IntegerSet(); integerSet.add(29); BitString builder = new BitString(); @@ -32,13 +33,13 @@ public void testEncode2() throws EncodingException { @Test public void testDecode1() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); } @Test public void testDecode2() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 8199a47d..7f312681 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -6,10 +6,11 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.field.UsNatField; public class EncodableOptimizedFixedRangeTest { - private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange(); + private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange<>(); @Test public void testEncode1() { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index 99ef930f..db142349 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.field.UsNatField; public class FixedIntegerListEncoderTest { @@ -150,7 +151,7 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - EncodableFixedIntegerList encodable = new EncodableFixedIntegerList(2, 2, null); + EncodableFixedIntegerList encodable = new EncodableFixedIntegerList<>(2, 2, null); return encodable.decode(BitString.of(str), null); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index 82c44343..d1fbbb47 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -58,11 +58,6 @@ public void testEncode6() { private int decode(String str) { return BitString.of(str).readInt(str.length()); } - - @Test - public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, decode("")); - } @Test public void testDecode2() throws DecodingException { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index 0b1e9411..50fea8bb 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -67,11 +67,6 @@ private long decode(String str) { return BitString.of(str).readLong(str.length()); } - @Test - public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, decode("")); - } - @Test public void testDecode2() throws DecodingException { Assertions.assertEquals(0, decode("0")); From c3fdad4a409d884ea7e78f111aaf7280e81cac27 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 14:08:14 -0500 Subject: [PATCH 110/146] remove bespoke segments --- .../com/iab/gpp/encoder/datatype/DataType.java | 1 - .../com/iab/gpp/encoder/field/FieldKey.java | 2 +- .../com/iab/gpp/encoder/section/HeaderV1.java | 4 ++-- .../com/iab/gpp/encoder/section/TcfCaV1.java | 6 ++---- .../com/iab/gpp/encoder/section/TcfEuV2.java | 7 ++----- .../java/com/iab/gpp/encoder/section/UsCa.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsCo.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsCt.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsDe.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsFl.java | 4 ++-- .../java/com/iab/gpp/encoder/section/UsIa.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsMt.java | 5 ++--- .../com/iab/gpp/encoder/section/UsNat.java | 5 +++-- .../java/com/iab/gpp/encoder/section/UsNe.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsNh.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsNj.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsOr.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsTn.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsTx.java | 5 ++--- .../java/com/iab/gpp/encoder/section/UsUt.java | 4 ++-- .../java/com/iab/gpp/encoder/section/UsVa.java | 4 ++-- .../encoder/segment/AbstractBase64Segment.java | 5 +---- .../iab/gpp/encoder/segment/Base64Segment.java | 18 ++++++++++++++++++ .../encoder/segment/HeaderV1CoreSegment.java | 11 ----------- .../encoder/segment/TcfCaV1CoreSegment.java | 11 ----------- .../TcfCaV1DisclosedVendorsSegment.java | 11 ----------- .../TcfCaV1PublisherPurposesSegment.java | 11 ----------- .../TcfEuV2PublisherPurposesSegment.java | 17 ----------------- .../segment/TcfEuV2VendorsAllowedSegment.java | 16 ---------------- .../TcfEuV2VendorsDisclosedSegment.java | 17 ----------------- ...ment.java => TraditionalBase64Segment.java} | 11 +++++------ .../gpp/encoder/segment/UsCaCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsCaGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsCoCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsCoGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsCtCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsCtGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsDeCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsDeGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsFlCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsIaCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsIaGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsMtCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsMtGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsNatCoreSegment.java | 6 ++++++ .../gpp/encoder/segment/UsNatGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsNeCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsNeGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsNhCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsNhGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsNjCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsNjGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsOrCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsOrGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsTnCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsTnGpcSegment.java | 11 ----------- .../gpp/encoder/segment/UsTxCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsTxGpcSegment.java | 10 ---------- .../gpp/encoder/segment/UsUtCoreSegment.java | 11 ----------- .../gpp/encoder/segment/UsVaCoreSegment.java | 11 ----------- 60 files changed, 70 insertions(+), 468 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/{TcfEuV2CoreSegment.java => TraditionalBase64Segment.java} (50%) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index fc7a05aa..ccd4f871 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -60,7 +60,6 @@ public final void set(Object[] values, int index, Object newValue) { protected abstract T initialize(); - // TODO: rename @SuppressWarnings("unchecked") protected T processValue(T oldValue, Object newValue) { return (T) newValue; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 78b143f5..db5a626a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -7,7 +7,7 @@ public interface FieldKey { String getName(); DataType getType(); - + public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); public static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); public static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 9c72f472..d6f4485a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.field.HeaderV1Field; -import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class HeaderV1 extends EncodableSection { @@ -11,7 +11,7 @@ public class HeaderV1 extends EncodableSection { public static final String NAME = "header"; public HeaderV1() { - super(new HeaderV1CoreSegment()); + super(new Base64Segment<>(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES)); } public HeaderV1(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 6c617596..0b47b597 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -7,9 +7,7 @@ import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; -import com.iab.gpp.encoder.segment.TcfCaV1CoreSegment; -import com.iab.gpp.encoder.segment.TcfCaV1DisclosedVendorsSegment; -import com.iab.gpp.encoder.segment.TcfCaV1PublisherPurposesSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class TcfCaV1 extends EncodableSection { @@ -18,7 +16,7 @@ public class TcfCaV1 extends EncodableSection { public static final String NAME = "tcfcav1"; public TcfCaV1() { - super(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); + super(new Base64Segment<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), new Base64Segment<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES)); } public TcfCaV1(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 42ba5c2c..48cbc5ef 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -7,10 +7,7 @@ import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; -import com.iab.gpp.encoder.segment.TcfEuV2CoreSegment; -import com.iab.gpp.encoder.segment.TcfEuV2PublisherPurposesSegment; -import com.iab.gpp.encoder.segment.TcfEuV2VendorsAllowedSegment; -import com.iab.gpp.encoder.segment.TcfEuV2VendorsDisclosedSegment; +import com.iab.gpp.encoder.segment.TraditionalBase64Segment; public class TcfEuV2 extends EncodableSection { @@ -19,7 +16,7 @@ public class TcfEuV2 extends EncodableSection { public static final String NAME = "tcfeuv2"; public TcfEuV2() { - super(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); + super(new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES)); } public TcfEuV2(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 751b3efd..86567df3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; -import com.iab.gpp.encoder.segment.UsCaCoreSegment; -import com.iab.gpp.encoder.segment.UsCaGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsCa extends EncodableSection { @@ -14,7 +13,7 @@ public class UsCa extends EncodableSection { public static final String NAME = "usca"; public UsCa() { - super(new UsCaCoreSegment(), new UsCaGpcSegment()); + super(new Base64Segment<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES)); } public UsCa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 6edcdc50..3ced2d1b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; -import com.iab.gpp.encoder.segment.UsCoCoreSegment; -import com.iab.gpp.encoder.segment.UsCoGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsCo extends EncodableSection { @@ -14,7 +13,7 @@ public class UsCo extends EncodableSection { public static final String NAME = "usco"; public UsCo() { - super(new UsCoCoreSegment(), new UsCoGpcSegment()); + super(new Base64Segment<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES)); } public UsCo(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index ae5d2425..3773b469 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; -import com.iab.gpp.encoder.segment.UsCtCoreSegment; -import com.iab.gpp.encoder.segment.UsCtGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsCt extends EncodableSection { @@ -14,7 +13,7 @@ public class UsCt extends EncodableSection { public static final String NAME = "usct"; public UsCt() { - super(new UsCtCoreSegment(), new UsCtGpcSegment()); + super(new Base64Segment<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES)); } public UsCt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index b8813500..8ac0838e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; -import com.iab.gpp.encoder.segment.UsDeCoreSegment; -import com.iab.gpp.encoder.segment.UsDeGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsDe extends EncodableSection { @@ -14,7 +13,7 @@ public class UsDe extends EncodableSection { public static final String NAME = "usde"; public UsDe() { - super(new UsDeCoreSegment(), new UsDeGpcSegment()); + super(new Base64Segment<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES)); } public UsDe(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index fe9de548..be6c7aa8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; -import com.iab.gpp.encoder.segment.UsFlCoreSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsFl extends EncodableSection { @@ -11,7 +11,7 @@ public class UsFl extends EncodableSection { public static final String NAME = "usfl"; public UsFl() { - super(new UsFlCoreSegment()); + super(new Base64Segment<>(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES)); } public UsFl(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index b3aed14b..9a409953 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; -import com.iab.gpp.encoder.segment.UsIaCoreSegment; -import com.iab.gpp.encoder.segment.UsIaGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsIa extends EncodableSection { @@ -14,7 +13,7 @@ public class UsIa extends EncodableSection { public static final String NAME = "usia"; public UsIa() { - super(new UsIaCoreSegment(), new UsIaGpcSegment()); + super(new Base64Segment<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES)); } public UsIa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 37ad215a..afbb1c0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; -import com.iab.gpp.encoder.segment.UsMtCoreSegment; -import com.iab.gpp.encoder.segment.UsMtGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsMt extends EncodableSection { @@ -14,7 +13,7 @@ public class UsMt extends EncodableSection { public static final String NAME = "usmt"; public UsMt() { - super(new UsMtCoreSegment(), new UsMtGpcSegment()); + super(new Base64Segment<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES)); } public UsMt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index c120e0b0..a99d1f07 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -4,8 +4,8 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; +import com.iab.gpp.encoder.segment.Base64Segment; import com.iab.gpp.encoder.segment.UsNatCoreSegment; -import com.iab.gpp.encoder.segment.UsNatGpcSegment; public class UsNat extends EncodableSection { @@ -14,7 +14,8 @@ public class UsNat extends EncodableSection { public static final String NAME = "usnat"; public UsNat() { - super(new UsNatCoreSegment(), new UsNatGpcSegment()); + // NOTE: the core segment has inconsistent decoding due to a version mixup + super(new UsNatCoreSegment(), new Base64Segment<>(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES)); } public UsNat(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 4ecd1d52..777e0c26 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; -import com.iab.gpp.encoder.segment.UsNeCoreSegment; -import com.iab.gpp.encoder.segment.UsNeGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsNe extends EncodableSection { @@ -14,7 +13,7 @@ public class UsNe extends EncodableSection { public static final String NAME = "usne"; public UsNe() { - super(new UsNeCoreSegment(), new UsNeGpcSegment()); + super(new Base64Segment<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES)); } public UsNe(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index d4df1a83..9d9362f7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; -import com.iab.gpp.encoder.segment.UsNhCoreSegment; -import com.iab.gpp.encoder.segment.UsNhGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsNh extends EncodableSection { @@ -14,7 +13,7 @@ public class UsNh extends EncodableSection { public static final String NAME = "usnh"; public UsNh() { - super(new UsNhCoreSegment(), new UsNhGpcSegment()); + super(new Base64Segment<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES)); } public UsNh(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 973d850a..5d4ea71b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; -import com.iab.gpp.encoder.segment.UsNjCoreSegment; -import com.iab.gpp.encoder.segment.UsNjGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsNj extends EncodableSection { @@ -14,7 +13,7 @@ public class UsNj extends EncodableSection { public static final String NAME = "usnj"; public UsNj() { - super(new UsNjCoreSegment(), new UsNjGpcSegment()); + super(new Base64Segment<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES)); } public UsNj(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 8c976cea..31b2427e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; -import com.iab.gpp.encoder.segment.UsOrCoreSegment; -import com.iab.gpp.encoder.segment.UsOrGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsOr extends EncodableSection { @@ -14,7 +13,7 @@ public class UsOr extends EncodableSection { public static final String NAME = "usor"; public UsOr() { - super(new UsOrCoreSegment(), new UsOrGpcSegment()); + super(new Base64Segment<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES)); } public UsOr(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index bc60d071..259751b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; -import com.iab.gpp.encoder.segment.UsTnCoreSegment; -import com.iab.gpp.encoder.segment.UsTnGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsTn extends EncodableSection { @@ -14,7 +13,7 @@ public class UsTn extends EncodableSection { public static final String NAME = "ustn"; public UsTn() { - super(new UsTnCoreSegment(), new UsTnGpcSegment()); + super(new Base64Segment<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES)); } public UsTn(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 05c1d5c0..cb77ca3a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -4,8 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; -import com.iab.gpp.encoder.segment.UsTxCoreSegment; -import com.iab.gpp.encoder.segment.UsTxGpcSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsTx extends EncodableSection { @@ -14,7 +13,7 @@ public class UsTx extends EncodableSection { public static final String NAME = "ustx"; public UsTx() { - super(new UsTxCoreSegment(), new UsTxGpcSegment()); + super(new Base64Segment<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES)); } public UsTx(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 68a7a729..1fcd44d0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; -import com.iab.gpp.encoder.segment.UsUtCoreSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsUt extends EncodableSection { @@ -11,7 +11,7 @@ public class UsUt extends EncodableSection { public static final String NAME = "usut"; public UsUt() { - super(new UsUtCoreSegment()); + super(new Base64Segment<>(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES)); } public UsUt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index ee12afe5..784fe826 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -2,7 +2,7 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; -import com.iab.gpp.encoder.segment.UsVaCoreSegment; +import com.iab.gpp.encoder.segment.Base64Segment; public class UsVa extends EncodableSection { @@ -11,7 +11,7 @@ public class UsVa extends EncodableSection { public static final String NAME = "usva"; public UsVa() { - super(new UsVaCoreSegment()); + super(new Base64Segment<>(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES)); } public UsVa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 414a2254..0c5f9e39 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.DecodingException; @@ -15,9 +14,7 @@ protected AbstractBase64Segment(FieldNames fieldNames) { super(fieldNames); } - protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return CompressedBase64UrlEncoder.getInstance(); - } + protected abstract AbstractBase64UrlEncoder getBase64UrlEncoder(); @Override protected final CharSequence doEncode() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java new file mode 100644 index 00000000..126845e7 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java @@ -0,0 +1,18 @@ +package com.iab.gpp.encoder.segment; + +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.FieldNames; + +public final class Base64Segment & FieldKey> extends AbstractBase64Segment { + + public Base64Segment(FieldNames fieldNames) { + super(fieldNames); + } + + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return CompressedBase64UrlEncoder.getInstance(); + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java deleted file mode 100644 index 3ed42bc1..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.HeaderV1Field; - -public final class HeaderV1CoreSegment extends AbstractBase64Segment { - - public HeaderV1CoreSegment() { - super(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java deleted file mode 100644 index bfebcccb..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.TcfCaV1Field; - -public final class TcfCaV1CoreSegment extends AbstractBase64Segment { - - public TcfCaV1CoreSegment() { - super(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java deleted file mode 100644 index 277a33e5..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.TcfCaV1Field; - -public final class TcfCaV1DisclosedVendorsSegment extends AbstractBase64Segment { - - public TcfCaV1DisclosedVendorsSegment() { - super(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java deleted file mode 100644 index 9f690cb2..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.TcfCaV1Field; - -public final class TcfCaV1PublisherPurposesSegment extends AbstractBase64Segment { - - public TcfCaV1PublisherPurposesSegment() { - super(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java deleted file mode 100644 index 4865fcaf..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.field.TcfEuV2Field; - -public final class TcfEuV2PublisherPurposesSegment extends AbstractBase64Segment { - - public TcfEuV2PublisherPurposesSegment() { - super(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); - } - - protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return TraditionalBase64UrlEncoder.getInstance(); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java deleted file mode 100644 index 71c0ba33..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.field.TcfEuV2Field; - -public final class TcfEuV2VendorsAllowedSegment extends AbstractBase64Segment { - - public TcfEuV2VendorsAllowedSegment() { - super(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); - } - - protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return TraditionalBase64UrlEncoder.getInstance(); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java deleted file mode 100644 index d34f267d..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.field.TcfEuV2Field; - -public final class TcfEuV2VendorsDisclosedSegment extends AbstractBase64Segment { - - public TcfEuV2VendorsDisclosedSegment() { - super(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); - } - - protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return TraditionalBase64UrlEncoder.getInstance(); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java similarity index 50% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java index 98aa2a04..dccbd52e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java @@ -2,14 +2,13 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.field.TcfEuV2Field; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.FieldNames; -public final class TcfEuV2CoreSegment extends AbstractBase64Segment { +public final class TraditionalBase64Segment & FieldKey> extends AbstractBase64Segment { - public TcfEuV2CoreSegment() { - super(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); - // NOTE: TcfEuV2.onSet records modifications - + public TraditionalBase64Segment(FieldNames fieldNames) { + super(fieldNames); } protected AbstractBase64UrlEncoder getBase64UrlEncoder() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java deleted file mode 100644 index 0d625b8d..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCaField; - -public final class UsCaCoreSegment extends AbstractBase64Segment { - - public UsCaCoreSegment() { - super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java deleted file mode 100644 index c7f28646..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCaField; - -public final class UsCaGpcSegment extends AbstractBase64Segment { - - public UsCaGpcSegment() { - super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java deleted file mode 100644 index 661393a2..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCoField; - -public final class UsCoCoreSegment extends AbstractBase64Segment { - - public UsCoCoreSegment() { - super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java deleted file mode 100644 index 3b50ea42..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCoField; - -public final class UsCoGpcSegment extends AbstractBase64Segment { - - public UsCoGpcSegment() { - super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java deleted file mode 100644 index 9414e8fa..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCtField; - -public final class UsCtCoreSegment extends AbstractBase64Segment { - - public UsCtCoreSegment() { - super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java deleted file mode 100644 index 5ddc9577..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsCtField; - -public final class UsCtGpcSegment extends AbstractBase64Segment { - - public UsCtGpcSegment() { - super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java deleted file mode 100644 index ba3dcb1e..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsDeField; - -public final class UsDeCoreSegment extends AbstractBase64Segment { - - public UsDeCoreSegment() { - super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java deleted file mode 100644 index 07659530..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsDeField; - -public final class UsDeGpcSegment extends AbstractBase64Segment { - - public UsDeGpcSegment() { - super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java deleted file mode 100644 index 06353278..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsFlField; - -public final class UsFlCoreSegment extends AbstractBase64Segment { - - public UsFlCoreSegment() { - super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java deleted file mode 100644 index fd658faf..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsIaField; - -public final class UsIaCoreSegment extends AbstractBase64Segment { - - public UsIaCoreSegment() { - super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java deleted file mode 100644 index 766eb006..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsIaField; - -public final class UsIaGpcSegment extends AbstractBase64Segment { - - public UsIaGpcSegment() { - super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java deleted file mode 100644 index f5110ea6..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsMtField; - -public final class UsMtCoreSegment extends AbstractBase64Segment { - - public UsMtCoreSegment() { - super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java deleted file mode 100644 index 9df22421..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsMtField; - -public final class UsMtGpcSegment extends AbstractBase64Segment { - - public UsMtGpcSegment() { - super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index b4d7523b..d87a5997 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,5 +1,7 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.UsNatField; @@ -9,6 +11,10 @@ public UsNatCoreSegment() { super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } + @Override protected BitString decodeBitString(CharSequence encodedString) { BitString bitString = super.decodeBitString(encodedString); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java deleted file mode 100644 index 1fb591cc..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNatField; - -public final class UsNatGpcSegment extends AbstractBase64Segment { - - public UsNatGpcSegment() { - super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java deleted file mode 100644 index c593421a..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNeField; - -public final class UsNeCoreSegment extends AbstractBase64Segment { - - public UsNeCoreSegment() { - super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java deleted file mode 100644 index 2eae46ba..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNeField; - -public final class UsNeGpcSegment extends AbstractBase64Segment { - - public UsNeGpcSegment() { - super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java deleted file mode 100644 index 9a801e7f..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNhField; - -public final class UsNhCoreSegment extends AbstractBase64Segment { - - public UsNhCoreSegment() { - super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java deleted file mode 100644 index 8876ba1b..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNhField; - -public final class UsNhGpcSegment extends AbstractBase64Segment { - - public UsNhGpcSegment() { - super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java deleted file mode 100644 index d4de4f4f..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNjField; - -public final class UsNjCoreSegment extends AbstractBase64Segment { - - public UsNjCoreSegment() { - super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java deleted file mode 100644 index badf504a..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsNjField; - -public final class UsNjGpcSegment extends AbstractBase64Segment { - - public UsNjGpcSegment() { - super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java deleted file mode 100644 index 68fe7067..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsOrField; - -public final class UsOrCoreSegment extends AbstractBase64Segment { - - public UsOrCoreSegment() { - super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java deleted file mode 100644 index 3ea74179..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsOrField; - -public final class UsOrGpcSegment extends AbstractBase64Segment { - - public UsOrGpcSegment() { - super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java deleted file mode 100644 index af7696db..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsTnField; - -public final class UsTnCoreSegment extends AbstractBase64Segment { - - public UsTnCoreSegment() { - super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java deleted file mode 100644 index 8e8eebee..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsTnField; - -public final class UsTnGpcSegment extends AbstractBase64Segment { - - public UsTnGpcSegment() { - super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java deleted file mode 100644 index b2dd047b..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsTxField; - -public final class UsTxCoreSegment extends AbstractBase64Segment { - - public UsTxCoreSegment() { - super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java deleted file mode 100644 index e64141c5..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsTxField; - -public final class UsTxGpcSegment extends AbstractBase64Segment { - - public UsTxGpcSegment() { - super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java deleted file mode 100644 index 3d5b91f3..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsUtField; - -public final class UsUtCoreSegment extends AbstractBase64Segment { - - public UsUtCoreSegment() { - super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java deleted file mode 100644 index dea92e45..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.field.UsVaField; - -public final class UsVaCoreSegment extends AbstractBase64Segment { - - public UsVaCoreSegment() { - super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); - } - -} From 0a1ea0965f1563b08f611a357c105e03970b88b0 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 14:37:14 -0500 Subject: [PATCH 111/146] clean up us hierarchy --- .../encoder/section/AbstractUsSection.java | 16 ++++++ .../section/AbstractUsSectionWithGpc.java | 55 +++++++++++++++++++ .../com/iab/gpp/encoder/section/UsCa.java | 37 +------------ .../com/iab/gpp/encoder/section/UsCo.java | 37 +------------ .../com/iab/gpp/encoder/section/UsCt.java | 37 +------------ .../com/iab/gpp/encoder/section/UsDe.java | 37 +------------ .../com/iab/gpp/encoder/section/UsFl.java | 2 +- .../com/iab/gpp/encoder/section/UsIa.java | 37 +------------ .../com/iab/gpp/encoder/section/UsMt.java | 37 +------------ .../com/iab/gpp/encoder/section/UsNat.java | 37 +------------ .../com/iab/gpp/encoder/section/UsNe.java | 36 +----------- .../com/iab/gpp/encoder/section/UsNh.java | 37 +------------ .../com/iab/gpp/encoder/section/UsNj.java | 37 +------------ .../com/iab/gpp/encoder/section/UsOr.java | 37 +------------ .../com/iab/gpp/encoder/section/UsTn.java | 37 +------------ .../com/iab/gpp/encoder/section/UsTx.java | 37 +------------ .../com/iab/gpp/encoder/section/UsUt.java | 2 +- .../com/iab/gpp/encoder/section/UsVa.java | 2 +- 18 files changed, 113 insertions(+), 444 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java new file mode 100644 index 00000000..cd7d1714 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java @@ -0,0 +1,16 @@ +package com.iab.gpp.encoder.section; + +import java.util.ArrayList; +import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.UsCaField; +import com.iab.gpp.encoder.segment.EncodableSegment; + +public abstract class AbstractUsSection & FieldKey> extends EncodableSection { + + @SafeVarargs + protected AbstractUsSection(EncodableSegment... segments) { + super(segments); + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java new file mode 100644 index 00000000..f04ed5ad --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java @@ -0,0 +1,55 @@ +package com.iab.gpp.encoder.section; + +import java.util.ArrayList; +import java.util.List; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.UsNeField; +import com.iab.gpp.encoder.segment.EncodableSegment; + +public abstract class AbstractUsSectionWithGpc & FieldKey> extends AbstractUsSection { + + protected AbstractUsSectionWithGpc(EncodableSegment coreSegment, EncodableSegment gpcSegment) { + super(coreSegment, gpcSegment); + } + + protected abstract E getGpcSegmentIncludedKey(); + + @Override + protected final void doDecode(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); + + if (numEncodedSegments > 0) { + getSegment(0).decode(encodedSegments.get(0)); + } + + E gpcSegmentIncludedKey = getGpcSegmentIncludedKey(); + if (numEncodedSegments > 1) { + getSegment(1).setFieldValue(gpcSegmentIncludedKey, Boolean.TRUE); + getSegment(1).decode(encodedSegments.get(1)); + } else { + getSegment(1).setFieldValue(gpcSegmentIncludedKey, Boolean.FALSE); + } + } + + @Override + protected final CharSequence doEncode() { + int size = size(); + List encodedSegments = new ArrayList<>(size); + + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size >= 2 && getGpcSegmentIncluded()) { + encodedSegments.add(getSegment(1).encodeCharSequence()); + } + + return SlicedCharSequence.join('.', encodedSegments); + } + + public abstract Integer getGpcSegmentType(); + + public Boolean getGpcSegmentIncluded() { + return (Boolean) getSegment(1).getFieldValue(getGpcSegmentIncludedKey()); + } + + public abstract Boolean getGpc(); +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 86567df3..7319eeae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsCa extends EncodableSection { +public class UsCa extends AbstractUsSectionWithGpc { public static final int ID = 8; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsCaField getGpcSegmentIncludedKey() { + return UsCaField.GPC_SEGMENT_INCLUDED; } - public Integer getSaleOptOutNotice() { return (Integer) this.getFieldValue(UsCaField.SALE_OPT_OUT_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsCaField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsCaField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 3ced2d1b..8adad7f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsCo extends EncodableSection { +public class UsCo extends AbstractUsSectionWithGpc { public static final int ID = 10; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsCoField getGpcSegmentIncludedKey() { + return UsCoField.GPC_SEGMENT_INCLUDED; } - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsCoField.SHARING_NOTICE); } @@ -110,10 +83,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsCoField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsCoField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 3773b469..d1f06d17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsCt extends EncodableSection { +public class UsCt extends AbstractUsSectionWithGpc { public static final int ID = 12; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsCtField getGpcSegmentIncludedKey() { + return UsCtField.GPC_SEGMENT_INCLUDED; } - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsCtField.SHARING_NOTICE); } @@ -110,10 +83,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsCtField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsCtField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 8ac0838e..a0ddd15e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsDe extends EncodableSection { +public class UsDe extends AbstractUsSectionWithGpc { public static final int ID = 17; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if (size() >= 2 && getSegment(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsDeField getGpcSegmentIncludedKey() { + return UsDeField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsDeField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsDeField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsDeField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index be6c7aa8..c967faf7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -4,7 +4,7 @@ import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsFl extends EncodableSection { +public class UsFl extends AbstractUsSection { public static final int ID = 13; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 9a409953..65445d6a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsIa extends EncodableSection { +public class UsIa extends AbstractUsSectionWithGpc { public static final int ID = 18; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if (size() >= 2 && getSegment(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsIaField getGpcSegmentIncludedKey() { + return UsIaField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsIaField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsIaField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsIaField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index afbb1c0c..1168a0f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsMt extends EncodableSection { +public class UsMt extends AbstractUsSectionWithGpc { public static final int ID = 14; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsMtField getGpcSegmentIncludedKey() { + return UsMtField.GPC_SEGMENT_INCLUDED; } - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsMtField.SHARING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsMtField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsMtField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index a99d1f07..19de1529 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -1,13 +1,11 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.segment.Base64Segment; import com.iab.gpp.encoder.segment.UsNatCoreSegment; -public class UsNat extends EncodableSection { +public class UsNat extends AbstractUsSectionWithGpc { public static final int ID = 7; public static final int VERSION = 1; @@ -39,35 +37,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsNatField getGpcSegmentIncludedKey() { + return UsNatField.GPC_SEGMENT_INCLUDED; } - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsNatField.SHARING_NOTICE); } @@ -132,10 +105,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsNatField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNatField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 777e0c26..f4232999 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsNe extends EncodableSection { +public class UsNe extends AbstractUsSectionWithGpc { public static final int ID = 19; public static final int VERSION = 1; @@ -37,32 +35,8 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsNeField getGpcSegmentIncludedKey() { + return UsNeField.GPC_SEGMENT_INCLUDED; } @@ -114,10 +88,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsNeField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNeField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 9d9362f7..53bbd2d3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsNh extends EncodableSection { +public class UsNh extends AbstractUsSectionWithGpc { public static final int ID = 20; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsNhField getGpcSegmentIncludedKey() { + return UsNhField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsNhField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsNhField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNhField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 5d4ea71b..8d3714f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsNj extends EncodableSection { +public class UsNj extends AbstractUsSectionWithGpc { public static final int ID = 21; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsNjField getGpcSegmentIncludedKey() { + return UsNjField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsNjField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsNjField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNjField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 31b2427e..4de29c8f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsOr extends EncodableSection { +public class UsOr extends AbstractUsSectionWithGpc { public static final int ID = 15; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsOrField getGpcSegmentIncludedKey() { + return UsOrField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsOrField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsOrField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsOrField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 259751b4..504bb7da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsTn extends EncodableSection { +public class UsTn extends AbstractUsSectionWithGpc { public static final int ID = 22; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString,'.'); - int numEncodedSegments = encodedSegments.size(); - - if(numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if(numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsTnField getGpcSegmentIncludedKey() { + return UsTnField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsTnField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsTnField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsTnField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index cb77ca3a..4dce1398 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -1,12 +1,10 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsTx extends EncodableSection { +public class UsTx extends AbstractUsSectionWithGpc { public static final int ID = 16; public static final int VERSION = 1; @@ -37,35 +35,10 @@ public int getVersion() { } @Override - protected void doDecode(CharSequence encodedString) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - int numEncodedSegments = encodedSegments.size(); - - if (numEncodedSegments > 0) { - getSegment(0).decode(encodedSegments.get(0)); - } - - if (numEncodedSegments > 1) { - getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); - getSegment(1).decode(encodedSegments.get(1)); - } else { - getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); - } - } - - @Override - protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - - encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size() >= 2 && getSegment(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - - return SlicedCharSequence.join('.', encodedSegments); + protected final UsTxField getGpcSegmentIncludedKey() { + return UsTxField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsTxField.PROCESSING_NOTICE); } @@ -114,10 +87,6 @@ public Integer getGpcSegmentType() { return (Integer) this.getFieldValue(UsTxField.GPC_SEGMENT_TYPE); } - public Boolean getGpcSegmentIncluded() { - return (Boolean) this.getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsTxField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 1fcd44d0..8c0cc9da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -4,7 +4,7 @@ import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsUt extends EncodableSection { +public class UsUt extends AbstractUsSection { public static final int ID = 11; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 784fe826..8b8eec58 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -4,7 +4,7 @@ import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.segment.Base64Segment; -public class UsVa extends EncodableSection { +public class UsVa extends AbstractUsSection { public static final int ID = 9; public static final int VERSION = 1; From 6e3bb4d2290308e2c2347cf5fa89c0c70f6c92db Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 14:37:46 -0500 Subject: [PATCH 112/146] cleanup --- .../java/com/iab/gpp/encoder/section/AbstractUsSection.java | 5 +---- .../iab/gpp/encoder/section/AbstractUsSectionWithGpc.java | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java index cd7d1714..f934b161 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java @@ -1,10 +1,6 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; -import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class AbstractUsSection & FieldKey> extends EncodableSection { @@ -13,4 +9,5 @@ public abstract class AbstractUsSection & FieldKey> extends En protected AbstractUsSection(EncodableSegment... segments) { super(segments); } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java index f04ed5ad..2c7c0390 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java @@ -3,7 +3,6 @@ import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class AbstractUsSectionWithGpc & FieldKey> extends AbstractUsSection { From 6be47f5976a66b999e1eeb007b227507a7ecd657 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 15:46:19 -0500 Subject: [PATCH 113/146] fix deriveds --- .../datatype/EncodableFlexibleBitfield.java | 12 +++++------ .../iab/gpp/encoder/field/TcfCaV1Field.java | 4 ++-- .../iab/gpp/encoder/field/TcfEuV2Field.java | 4 ++-- .../AbstractLazilyEncodableSegment.java | 3 +-- .../gpp/encoder/segment/EncodableSegment.java | 6 +++--- .../encoder/segment/SegmentValueProvider.java | 20 +++++++++++++++++++ 6 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index b8842528..d6a48a11 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -1,20 +1,20 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import java.util.function.ToIntFunction; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.SegmentValueProvider; import com.iab.gpp.encoder.segment.EncodableSegment; public final class EncodableFlexibleBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { - private final ToIntFunction> getLengthSupplier; + private final SegmentValueProvider getLengthSupplier; - public EncodableFlexibleBitfield(ToIntFunction> getLengthSupplier) { - this.getLengthSupplier = getLengthSupplier; + public EncodableFlexibleBitfield(E key) { + this.getLengthSupplier = new SegmentValueProvider<>(key); } @Override @@ -25,7 +25,7 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { try { - FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.applyAsInt(segment)); + FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.extract(segment)); } catch (Exception e) { throw new EncodingException(e); } @@ -34,7 +34,7 @@ protected void encode(BitString builder, IntegerSet value, EncodableSegment s @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { try { - return reader.readIntegerSet(getLengthSupplier.applyAsInt(segment)); + return reader.readIntegerSet(getLengthSupplier.extract(segment)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 32628858..8d8c19e1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -33,8 +33,8 @@ public enum TcfCaV1Field implements FieldKey { PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield<>(24)), PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield<>(24)), NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), - CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), - CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfCaV1Field.NUM_CUSTOM_PURPOSES))), + CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield<>(TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield<>(TcfCaV1Field.NUM_CUSTOM_PURPOSES)), DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger<>(3, 1)), DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange<>()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 0d383908..796a23ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -35,8 +35,8 @@ public enum TcfEuV2Field implements FieldKey { PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield<>(24)), PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield<>(24)), NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), - PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield(segment -> (Integer) segment.getFieldValueUnsafe(TcfEuV2Field.NUM_CUSTOM_PURPOSES))), + PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield<>(TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield<>(TcfEuV2Field.NUM_CUSTOM_PURPOSES)), VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger<>(3, 2)), VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange<>()), VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger<>(3, 1)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 3fbf06c5..324931db 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -63,9 +63,8 @@ public final Object getFieldValue(E fieldName) { return getFieldValueUnsafe(fieldName); } - // TODO: try to hide this @Override - public final Object getFieldValueUnsafe(E fieldName) { + protected final Object getFieldValueUnsafe(E fieldName) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { return fieldNames.getType(index).get(values, index); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index d96424d7..30654a43 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -5,12 +5,12 @@ public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { public abstract E resolveKey(FieldKey fieldName); - + public abstract boolean hasField(E fieldName); public abstract Object getFieldValue(E fieldName); - - public abstract Object getFieldValueUnsafe(E fieldName); + + protected abstract Object getFieldValueUnsafe(E key); public abstract void setFieldValue(E fieldName, Object value); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java new file mode 100644 index 00000000..52c2a61d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java @@ -0,0 +1,20 @@ +package com.iab.gpp.encoder.segment; + +import com.iab.gpp.encoder.field.FieldKey; + +public class SegmentValueProvider & FieldKey> { + private final E key; + + public SegmentValueProvider(E key) { + this.key = key; + } + + public int modify(int original) { + return original; + } + + public final int extract(EncodableSegment segment) { + return (Integer) segment.getFieldValueUnsafe(key); + } + +} From bff7d39b64c251e3e718c2637d9ffa985f60a604 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 16:39:39 -0500 Subject: [PATCH 114/146] move name --- .../AbstractDirtyableBitStringDataType.java | 5 ++ .../AbstractEncodableBitStringDataType.java | 5 ++ .../iab/gpp/encoder/datatype/DataType.java | 12 ++- .../EncodableArrayOfFixedIntegerRanges.java | 3 +- .../encoder/datatype/EncodableBoolean.java | 3 +- .../encoder/datatype/EncodableDatetime.java | 4 + .../datatype/EncodableFibonacciInteger.java | 3 +- .../EncodableFibonacciIntegerRange.java | 4 + .../datatype/EncodableFixedBitfield.java | 3 +- .../datatype/EncodableFixedInteger.java | 8 +- .../datatype/EncodableFixedIntegerList.java | 4 +- .../datatype/EncodableFixedIntegerRange.java | 4 + .../datatype/EncodableFixedString.java | 3 +- .../datatype/EncodableFlexibleBitfield.java | 3 +- .../EncodableOptimizedFixedRange.java | 4 + .../encoder/datatype/UnencodableBoolean.java | 3 +- .../datatype/UnencodableCharacter.java | 4 +- .../encoder/datatype/UnencodableInteger.java | 3 +- .../com/iab/gpp/encoder/field/FieldKey.java | 1 - .../com/iab/gpp/encoder/field/FieldNames.java | 12 +-- .../iab/gpp/encoder/field/HeaderV1Field.java | 15 +--- .../iab/gpp/encoder/field/TcfCaV1Field.java | 57 +++++++------- .../iab/gpp/encoder/field/TcfEuV2Field.java | 67 ++++++++--------- .../com/iab/gpp/encoder/field/UsCaField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsCoField.java | 55 ++++++-------- .../com/iab/gpp/encoder/field/UsCtField.java | 55 ++++++-------- .../com/iab/gpp/encoder/field/UsDeField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsFlField.java | 53 ++++++------- .../com/iab/gpp/encoder/field/UsIaField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsMtField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsNatField.java | 75 +++++++++---------- .../com/iab/gpp/encoder/field/UsNeField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsNhField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsNjField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsOrField.java | 59 +++++++-------- .../com/iab/gpp/encoder/field/UsTnField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsTxField.java | 61 +++++++-------- .../com/iab/gpp/encoder/field/UsUtField.java | 55 ++++++-------- .../com/iab/gpp/encoder/field/UsVaField.java | 51 ++++++------- .../com/iab/gpp/encoder/field/UspV1Field.java | 17 ++--- .../segment/AbstractBase64Segment.java | 22 ++---- .../AbstractLazilyEncodableSegment.java | 20 ++--- .../EncodableFixedIntegerRangeTest.java | 8 +- .../EncodableOptimizedFixedRangeTest.java | 2 +- .../datatype/FixedIntegerListEncoderTest.java | 2 +- 45 files changed, 561 insertions(+), 684 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index 24aa5c0b..8b88c1a4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.datatype; +import java.util.function.Predicate; import com.iab.gpp.encoder.field.FieldKey; // This class is used to handle collection types. @@ -7,6 +8,10 @@ public abstract class AbstractDirtyableBitStringDataType & FieldKey, T extends Dirtyable> extends AbstractEncodableBitStringDataType { + protected AbstractDirtyableBitStringDataType(String name, Predicate validator) { + super(name, validator); + } + @Override public boolean isDirty(Object[] values, int index) { T value = get(values, index); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index f2cb63d4..8783843b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -1,11 +1,16 @@ package com.iab.gpp.encoder.datatype; +import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class AbstractEncodableBitStringDataType & FieldKey, T> extends DataType { + protected AbstractEncodableBitStringDataType(String name, Predicate validator) { + super(name, validator); + } + @Override public final void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { encode(writer, get(values, index), segment); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index ccd4f871..a01d1385 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -10,7 +10,17 @@ public abstract class DataType & FieldKey, T> { - protected Predicate validator = null; + private final String name; + private final Predicate validator; + + protected DataType(String name, Predicate validator) { + this.name = name; + this.validator = validator; + } + + public final String getName() { + return name; + } protected final void validate(T v) { if (validator == null || validator.test(v)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index abd43f94..cdeed31b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -13,7 +13,8 @@ public final class EncodableArrayOfFixedIntegerRanges & FieldK private final int keyBitStringLength; private final int typeBitStringLength; - public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { + public EncodableArrayOfFixedIntegerRanges(String name, int keyBitStringLength, int typeBitStringLength) { + super(name, null); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 5e019b1e..7ab87584 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -10,7 +10,8 @@ public final class EncodableBoolean & FieldKey> extends Abstra private final Boolean initial; - public EncodableBoolean(Boolean initial) { + public EncodableBoolean(String name, Boolean initial) { + super(name, null); this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 2b1e143a..dbb829a0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -10,6 +10,10 @@ public final class EncodableDatetime & FieldKey> extends AbstractEncodableBitStringDataType { + public EncodableDatetime(String name) { + super(name, null); + } + @Override protected Instant initialize() { return Instant.EPOCH; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index c0677d9a..6afe0abd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -10,7 +10,8 @@ public final class EncodableFibonacciInteger & FieldKey> exten private final Integer initial; - public EncodableFibonacciInteger(Integer initial) { + public EncodableFibonacciInteger(String name, Integer initial) { + super(name, null); this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index f56780ad..a1401944 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -10,6 +10,10 @@ public final class EncodableFibonacciIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { + public EncodableFibonacciIntegerRange(String name) { + super(name, null); + } + @Override public IntegerSet initialize() { return new IntegerSet(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 862c5478..dd524d41 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -12,7 +12,8 @@ public final class EncodableFixedBitfield & FieldKey> extends private final int numElements; - public EncodableFixedBitfield(int numElements) { + public EncodableFixedBitfield(String name, int numElements) { + super(name, null); this.numElements = numElements; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 6d075cd5..c628147e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -12,14 +12,14 @@ public final class EncodableFixedInteger & FieldKey> extends A private final int bitStringLength; private final Integer initial; - public EncodableFixedInteger(int bitStringLength, Integer initial, Predicate validator) { + public EncodableFixedInteger(String name, int bitStringLength, Integer initial, Predicate validator) { + super(name, validator); this.bitStringLength = bitStringLength; this.initial = initial; - this.validator = validator; } - public EncodableFixedInteger(int bitStringLength, Integer initial) { - this(bitStringLength, initial, null); + public EncodableFixedInteger(String name, int bitStringLength, Integer initial) { + this(name, bitStringLength, initial, null); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index cb840d81..df5fbc70 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -14,10 +14,10 @@ public final class EncodableFixedIntegerList & FieldKey> exten private final int elementBitStringLength; private final int numElements; - public EncodableFixedIntegerList(int elementBitStringLength, int numElements, Predicate validator) { + public EncodableFixedIntegerList(String name, int elementBitStringLength, int numElements, Predicate validator) { + super(name, validator); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; - this.validator = validator; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 5875f827..f50abad4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -10,6 +10,10 @@ public final class EncodableFixedIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { + public EncodableFixedIntegerRange(String name) { + super(name, null); + } + @Override protected IntegerSet initialize() { return new IntegerSet(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 38d2d4bb..60d1472b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -12,7 +12,8 @@ public final class EncodableFixedString & FieldKey> extends Ab private final int stringLength; private final String initial; - public EncodableFixedString(int stringLength, String initial) { + public EncodableFixedString(String name, int stringLength, String initial) { + super(name, null); this.stringLength = stringLength; this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index d6a48a11..aae841a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -13,7 +13,8 @@ public final class EncodableFlexibleBitfield & FieldKey> exten private final SegmentValueProvider getLengthSupplier; - public EncodableFlexibleBitfield(E key) { + public EncodableFlexibleBitfield(String name, E key) { + super(name, null); this.getLengthSupplier = new SegmentValueProvider<>(key); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 8ef5dd8c..f41dd0b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -11,6 +11,10 @@ public final class EncodableOptimizedFixedRange & FieldKey> extends AbstractDirtyableBitStringDataType { + public EncodableOptimizedFixedRange(String name) { + super(name, null); + } + @Override protected IntegerSet initialize() { return new IntegerSet(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 791bd05a..d506ba2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -8,7 +8,8 @@ public final class UnencodableBoolean & FieldKey> extends Abst private final Boolean initial; - public UnencodableBoolean(Boolean initial) { + public UnencodableBoolean(String name, Boolean initial) { + super(name, null); this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 04eb4a3a..13dbb8ca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -7,9 +7,9 @@ public final class UnencodableCharacter & FieldKey> extends Da private final Character initial; - public UnencodableCharacter(Character initial, Predicate validator) { + public UnencodableCharacter(String name, Character initial, Predicate validator) { + super(name, validator); this.initial = initial; - this.validator = validator; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index a6d5f1b8..efb65924 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -6,7 +6,8 @@ public final class UnencodableInteger & FieldKey> extends Data private final Integer initial; - public UnencodableInteger(Integer initial) { + public UnencodableInteger(String name, Integer initial) { + super(name, null); this.initial = initial; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index db5a626a..10b750da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.datatype.FixedIntegerList; public interface FieldKey { - String getName(); DataType getType(); public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 3b338e0b..e4bd68d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -5,14 +5,12 @@ public final class FieldNames & FieldKey> { - private final E[] keys; private final LinkedHashMap map; private final Integer[] indices; private final Object[] types; @SafeVarargs FieldNames(E... keys) { - this.keys = keys; this.map = new LinkedHashMap<>(); this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; this.types = new Object[keys.length]; @@ -25,15 +23,11 @@ public final class FieldNames & FieldKey> { } public int size() { - return keys.length; + return types.length; } - - public E get(int i) { - return keys[i]; - } - + @SuppressWarnings("unchecked") - public DataType getType(int i) { + public DataType get(int i) { return (DataType) types[i]; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 2ce3cf26..957263c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -6,23 +6,16 @@ import com.iab.gpp.encoder.section.HeaderV1; public enum HeaderV1Field implements FieldKey { - ID("Id", new EncodableFixedInteger<>(6, HeaderV1.ID)), - VERSION("Version", new EncodableFixedInteger<>(6, HeaderV1.VERSION)), - SECTION_IDS("SectionIds", new EncodableFibonacciIntegerRange<>()); + ID(new EncodableFixedInteger<>("Id", 6, HeaderV1.ID)), + VERSION(new EncodableFixedInteger<>("Version", 6, HeaderV1.VERSION)), + SECTION_IDS(new EncodableFibonacciIntegerRange<>("SectionIds")); - private final String name; private final DataType type; - HeaderV1Field(String name, DataType type) { - this.name = name; + HeaderV1Field(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 8d8c19e1..7df97035 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -12,46 +12,39 @@ import com.iab.gpp.encoder.section.TcfCaV1; public enum TcfCaV1Field implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, TcfCaV1.VERSION)), - CREATED("Created", new EncodableDatetime<>()), - LAST_UPDATED("LastUpdated", new EncodableDatetime<>()), - CMP_ID("CmpId", new EncodableFixedInteger<>(12, 0)), - CMP_VERSION("CmpVersion", new EncodableFixedInteger<>(12, 0)), - CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger<>(6, 0)), - CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString<>(2, "EN")), - VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger<>(12, 0)), - TCF_POLICY_VERSION("TcfPolicyVersion", new EncodableFixedInteger<>(6, 2)), - USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean<>(false)), - SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent", new EncodableFixedBitfield<>(12)), - PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent", new EncodableFixedBitfield<>(24)), - PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent", new EncodableFixedBitfield<>(24)), - VENDOR_EXPRESS_CONSENT("VendorExpressConsent", new EncodableOptimizedFixedRange<>()), - VENDOR_IMPLIED_CONSENT("VendorImpliedConsent", new EncodableOptimizedFixedRange<>()), - PUB_RESTRICTIONS("PubRestrictions", new EncodableArrayOfFixedIntegerRanges<>(6, 2, false)), + VERSION(new EncodableFixedInteger<>("Version", 6, TcfCaV1.VERSION)), + CREATED(new EncodableDatetime<>("Created")), + LAST_UPDATED(new EncodableDatetime<>("LastUpdated")), + CMP_ID(new EncodableFixedInteger<>("CmpId", 12, 0)), + CMP_VERSION(new EncodableFixedInteger<>("CmpVersion", 12, 0)), + CONSENT_SCREEN(new EncodableFixedInteger<>("ConsentScreen", 6, 0)), + CONSENT_LANGUAGE(new EncodableFixedString<>("ConsentLanguage", 2, "EN")), + VENDOR_LIST_VERSION(new EncodableFixedInteger<>("VendorListVersion", 12, 0)), + TCF_POLICY_VERSION(new EncodableFixedInteger<>("TcfPolicyVersion", 6, 2)), + USE_NON_STANDARD_STACKS(new EncodableBoolean<>("UseNonStandardStacks", false)), + SPECIAL_FEATURE_EXPRESS_CONSENT(new EncodableFixedBitfield<>("SpecialFeatureExpressConsent", 12)), + PURPOSES_EXPRESS_CONSENT(new EncodableFixedBitfield<>("PurposesExpressConsent", 24)), + PURPOSES_IMPLIED_CONSENT(new EncodableFixedBitfield<>("PurposesImpliedConsent", 24)), + VENDOR_EXPRESS_CONSENT(new EncodableOptimizedFixedRange<>("VendorExpressConsent")), + VENDOR_IMPLIED_CONSENT(new EncodableOptimizedFixedRange<>("VendorImpliedConsent")), + PUB_RESTRICTIONS(new EncodableArrayOfFixedIntegerRanges<>("PubRestrictions", 6, 2)), - PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType", new EncodableFixedInteger<>(3, 3)), - PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent", new EncodableFixedBitfield<>(24)), - PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent", new EncodableFixedBitfield<>(24)), - NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), - CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent", new EncodableFlexibleBitfield<>(TcfCaV1Field.NUM_CUSTOM_PURPOSES)), - CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent", new EncodableFlexibleBitfield<>(TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + PUB_PURPOSES_SEGMENT_TYPE(new EncodableFixedInteger<>("PubPurposesSegmentType", 3, 3)), + PUB_PURPOSES_EXPRESS_CONSENT(new EncodableFixedBitfield<>("PubPurposesExpressConsent", 24)), + PUB_PURPOSES_IMPLIED_CONSENT(new EncodableFixedBitfield<>("PubPurposesImpliedConsent", 24)), + NUM_CUSTOM_PURPOSES(new EncodableFixedInteger<>("NumCustomPurposes", 6, 0)), + CUSTOM_PURPOSES_EXPRESS_CONSENT(new EncodableFlexibleBitfield<>("CustomPurposesExpressConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + CUSTOM_PURPOSES_IMPLIED_CONSENT(new EncodableFlexibleBitfield<>("CustomPurposesImpliedConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), - DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType", new EncodableFixedInteger<>(3, 1)), - DISCLOSED_VENDORS("DisclosedVendors", new EncodableOptimizedFixedRange<>()); + DISCLOSED_VENDORS_SEGMENT_TYPE(new EncodableFixedInteger<>("DisclosedVendorsSegmentType", 3, 1)), + DISCLOSED_VENDORS(new EncodableOptimizedFixedRange<>("DisclosedVendors")); - private final String name; private final DataType type; - TcfCaV1Field(String name, DataType type) { - this.name = name; + TcfCaV1Field(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 796a23ea..8a1ebddf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -12,49 +12,42 @@ import com.iab.gpp.encoder.section.TcfEuV2; public enum TcfEuV2Field implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, TcfEuV2.VERSION)), - CREATED("Created", new EncodableDatetime<>()), - LAST_UPDATED("LastUpdated", new EncodableDatetime<>()), - CMP_ID("CmpId", new EncodableFixedInteger<>(12, 0)), - CMP_VERSION("CmpVersion", new EncodableFixedInteger<>(12, 0)), - CONSENT_SCREEN("ConsentScreen", new EncodableFixedInteger<>(6, 0)), - CONSENT_LANGUAGE("ConsentLanguage", new EncodableFixedString<>(2, "EN")), - VENDOR_LIST_VERSION("VendorListVersion", new EncodableFixedInteger<>(12, 0)), - POLICY_VERSION("PolicyVersion", new EncodableFixedInteger<>(6, 2)), - IS_SERVICE_SPECIFIC("IsServiceSpecific", new EncodableBoolean<>(false)), - USE_NON_STANDARD_STACKS("UseNonStandardStacks", new EncodableBoolean<>(false)), - SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins", new EncodableFixedBitfield<>(12)), - PURPOSE_CONSENTS("PurposeConsents", new EncodableFixedBitfield<>(24)), - PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests", new EncodableFixedBitfield<>(24)), - PURPOSE_ONE_TREATMENT("PurposeOneTreatment", new EncodableBoolean<>(false)), - PUBLISHER_COUNTRY_CODE("PublisherCountryCode", new EncodableFixedString<>(2, "AA")), - VENDOR_CONSENTS("VendorConsents", new EncodableOptimizedFixedRange<>()), - VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests", new EncodableOptimizedFixedRange<>()), - PUBLISHER_RESTRICTIONS("PublisherRestrictions", new EncodableArrayOfFixedIntegerRanges<>(6, 2, false)), - PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType", new EncodableFixedInteger<>(3, 3)), - PUBLISHER_CONSENTS("PublisherConsents", new EncodableFixedBitfield<>(24)), - PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests", new EncodableFixedBitfield<>(24)), - NUM_CUSTOM_PURPOSES("NumCustomPurposes", new EncodableFixedInteger<>(6, 0)), - PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents", new EncodableFlexibleBitfield<>(TcfEuV2Field.NUM_CUSTOM_PURPOSES)), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests", new EncodableFlexibleBitfield<>(TcfEuV2Field.NUM_CUSTOM_PURPOSES)), - VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType", new EncodableFixedInteger<>(3, 2)), - VENDORS_ALLOWED("VendorsAllowed", new EncodableOptimizedFixedRange<>()), - VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType", new EncodableFixedInteger<>(3, 1)), - VENDORS_DISCLOSED("VendorsDisclosed", new EncodableOptimizedFixedRange<>()); + VERSION(new EncodableFixedInteger<>("Version", 6, TcfEuV2.VERSION)), + CREATED(new EncodableDatetime<>("Created")), + LAST_UPDATED(new EncodableDatetime<>("LastUpdated")), + CMP_ID(new EncodableFixedInteger<>("CmpId", 12, 0)), + CMP_VERSION(new EncodableFixedInteger<>("CmpVersion", 12, 0)), + CONSENT_SCREEN(new EncodableFixedInteger<>("ConsentScreen", 6, 0)), + CONSENT_LANGUAGE(new EncodableFixedString<>("ConsentLanguage", 2, "EN")), + VENDOR_LIST_VERSION(new EncodableFixedInteger<>("VendorListVersion", 12, 0)), + POLICY_VERSION(new EncodableFixedInteger<>("PolicyVersion", 6, 2)), + IS_SERVICE_SPECIFIC(new EncodableBoolean<>("IsServiceSpecific", false)), + USE_NON_STANDARD_STACKS(new EncodableBoolean<>("UseNonStandardStacks", false)), + SPECIAL_FEATURE_OPTINS(new EncodableFixedBitfield<>("SpecialFeatureOptins", 12)), + PURPOSE_CONSENTS(new EncodableFixedBitfield<>("PurposeConsents", 24)), + PURPOSE_LEGITIMATE_INTERESTS(new EncodableFixedBitfield<>("PurposeLegitimateInterests", 24)), + PURPOSE_ONE_TREATMENT(new EncodableBoolean<>("PurposeOneTreatment", false)), + PUBLISHER_COUNTRY_CODE(new EncodableFixedString<>("PublisherCountryCode", 2, "AA")), + VENDOR_CONSENTS(new EncodableOptimizedFixedRange<>("VendorConsents")), + VENDOR_LEGITIMATE_INTERESTS(new EncodableOptimizedFixedRange<>("VendorLegitimateInterests")), + PUBLISHER_RESTRICTIONS(new EncodableArrayOfFixedIntegerRanges<>("PublisherRestrictions", 6, 2)), + PUBLISHER_PURPOSES_SEGMENT_TYPE(new EncodableFixedInteger<>("PublisherPurposesSegmentType", 3, 3)), + PUBLISHER_CONSENTS(new EncodableFixedBitfield<>("PublisherConsents", 24)), + PUBLISHER_LEGITIMATE_INTERESTS(new EncodableFixedBitfield<>("PublisherLegitimateInterests", 24)), + NUM_CUSTOM_PURPOSES(new EncodableFixedInteger<>("NumCustomPurposes", 6, 0)), + PUBLISHER_CUSTOM_CONSENTS(new EncodableFlexibleBitfield<>("PublisherCustomConsents", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS(new EncodableFlexibleBitfield<>("PublisherCustomLegitimateInterests", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + VENDORS_ALLOWED_SEGMENT_TYPE(new EncodableFixedInteger<>("VendorsAllowedSegmentType", 3, 2)), + VENDORS_ALLOWED(new EncodableOptimizedFixedRange<>("VendorsAllowed")), + VENDORS_DISCLOSED_SEGMENT_TYPE(new EncodableFixedInteger<>("VendorsDisclosedSegmentType", 3, 1)), + VENDORS_DISCLOSED(new EncodableOptimizedFixedRange<>("VendorsDisclosed")); - private final String name; private final DataType type; - TcfEuV2Field(String name, DataType type) { - this.name = name; + TcfEuV2Field(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 3c2329e0..7cb4bb22 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsCa; public enum UsCaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsCa.VERSION)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SHARING_OPT_OUT("SharingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 9, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 2, nullableBooleanAsTwoBitIntegerListValidator)), - PERSONAL_DATA_CONSENTS("PersonalDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsCa.VERSION)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_LIMIT_USE_NOTICE( + new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT( + new EncodableFixedInteger<>("SharingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, nullableBooleanAsTwoBitIntegerListValidator)), + PERSONAL_DATA_CONSENTS( + new EncodableFixedInteger<>("PersonalDataConsents",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction",2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsCaField(String name, DataType type) { - this.name = name; + UsCaField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index e04cdb4c..84b431ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -8,44 +8,37 @@ import com.iab.gpp.encoder.section.UsCo; public enum UsCoField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsCo.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", new EncodableFixedIntegerList<>(2, 7, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsCo.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING(new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsCoField(String name, DataType type) { - this.name = name; + UsCoField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 58990ea5..5aa4d8fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -8,44 +8,37 @@ import com.iab.gpp.encoder.section.UsCt; public enum UsCtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsCt.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsCt.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsCtField(String name, DataType type) { - this.name = name; + UsCtField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 3c768a13..ad7a0a7e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsDe; public enum UsDeField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsDe.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 9, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedIntegerList<>(2, 5, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsDe.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsDeField(String name, DataType type) { - this.name = name; + UsDeField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 94c26276..3962017d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -6,42 +6,35 @@ import com.iab.gpp.encoder.section.UsFl; public enum UsFlField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsFl.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); + VERSION(new EncodableFixedInteger<>("Version", 6, UsFl.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); - private final String name; private final DataType type; - UsFlField(String name, DataType type) { - this.name = name; + UsFlField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index f15b6157..f002508e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsIa; public enum UsIaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsIa.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsIa.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SensitiveDataOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsIaField(String name, DataType type) { - this.name = name; + UsIaField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 012fb72d..43e39200 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsMt; public enum UsMtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsMt.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsMt.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsMtField(String name, DataType type) { - this.name = name; + UsMtField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 7bffab80..791f5c92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -8,54 +8,47 @@ import com.iab.gpp.encoder.section.UsNat; public enum UsNatField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsNat.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SHARING_OPT_OUT_NOTICE("SharingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SHARING_OPT_OUT("SharingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 16, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - PERSONAL_DATA_CONSENTS("PersonalDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsNat.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_LIMIT_USE_NOTICE( + new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SHARING_OPT_OUT( + new EncodableFixedInteger<>("SharingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + PERSONAL_DATA_CONSENTS( + new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsNatField(String name, DataType type) { - this.name = name; + UsNatField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 750bffae..efa39c8b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsNe; public enum UsNeField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsNe.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsNe.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsNeField(String name, DataType type) { - this.name = name; + UsNeField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 26a5b198..3808b71d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsNh; public enum UsNhField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsNh.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsNh.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsNhField(String name, DataType type) { - this.name = name; + UsNhField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 24e94a2d..e0a5af8d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsNj; public enum UsNjField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsNj.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 10, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 5, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsNj.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 10, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsNjField(String name, DataType type) { - this.name = name; + UsNjField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index 16df94f9..f9cb55a9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -8,46 +8,39 @@ import com.iab.gpp.encoder.section.UsOr; public enum UsOrField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsOr.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 11, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", new EncodableFixedIntegerList<>(2, 3, nullableBooleanAsTwoBitIntegerListValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsOr.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 11, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsOrField(String name, DataType type) { - this.name = name; + UsOrField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 4742a86f..f83e0207 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsTn; public enum UsTnField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsTn.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsTn.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsTnField(String name, DataType type) { - this.name = name; + UsTnField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index d571a463..eb16dbeb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -8,47 +8,40 @@ import com.iab.gpp.encoder.section.UsTx; public enum UsTxField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsTx.VERSION)), - PROCESSING_NOTICE("ProcessingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), + VERSION(new EncodableFixedInteger<>("Version", 6, UsTx.VERSION)), + PROCESSING_NOTICE( + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - GPC_SEGMENT_TYPE("GpcSegmentType", new EncodableFixedInteger<>(2, 1)), - GPC_SEGMENT_INCLUDED("GpcSegmentIncluded", new UnencodableBoolean<>(true)), - GPC("Gpc", new EncodableBoolean<>(false)); + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); - private final String name; private final DataType type; - UsTxField(String name, DataType type) { - this.name = name; + UsTxField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 101f80ec..47c9ba4c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -6,43 +6,36 @@ import com.iab.gpp.encoder.section.UsUt; public enum UsUtField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsUt.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); + VERSION(new EncodableFixedInteger<>("Version", 6, UsUt.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); - private final String name; private final DataType type; - UsUtField(String name, DataType type) { - this.name = name; + UsUtField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 626de774..9f013cc2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -6,41 +6,34 @@ import com.iab.gpp.encoder.section.UsVa; public enum UsVaField implements FieldKey { - VERSION("Version", new EncodableFixedInteger<>(6, UsVa.VERSION)), - SHARING_NOTICE("SharingNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT_NOTICE("SaleOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SALE_OPT_OUT("SaleOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing", - new EncodableFixedIntegerList<>(2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_COVERED_TRANSACTION("MspaCoveredTransaction", - new EncodableFixedInteger<>(2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), - MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)), - MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode", - new EncodableFixedInteger<>(2, 0, nullableBooleanAsTwoBitIntegerValidator)); + VERSION(new EncodableFixedInteger<>("Version", 6, UsVa.VERSION)), + SHARING_NOTICE( + new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SALE_OPT_OUT( + new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); - private final String name; private final DataType type; - UsVaField(String name, DataType type) { - this.name = name; + UsVaField(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index cacb12c0..42921193 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -6,24 +6,17 @@ import com.iab.gpp.encoder.section.UspV1; public enum UspV1Field implements FieldKey { - VERSION("Version", new UnencodableInteger<>(UspV1.VERSION)), - NOTICE("Notice", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))), - OPT_OUT_SALE("OptOutSale", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))), - LSPA_COVERED("LspaCovered", new UnencodableCharacter<>('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + VERSION(new UnencodableInteger<>("Version", UspV1.VERSION)), + NOTICE(new UnencodableCharacter<>("Notice", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), + OPT_OUT_SALE(new UnencodableCharacter<>("OptOutSale", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), + LSPA_COVERED(new UnencodableCharacter<>("LspaCovered", '-', (v -> v == 'Y' || v == 'N' || v == '-'))); - private final String name; private final DataType type; - UspV1Field(String name, DataType type) { - this.name = name; + UspV1Field(DataType type) { this.type = type; } - @Override - public String getName() { - return name; - } - @Override public DataType getType() { return type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 0c5f9e39..28c3cc80 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; @@ -21,12 +20,7 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = fieldNames.getType(i); - if (field != null) { - field.encode(bitString, values, i, this); - } else { - throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); - } + fieldNames.get(i).encode(bitString, values, i, this); } return getBase64UrlEncoder().encode(bitString); @@ -38,15 +32,11 @@ protected final void doDecode(CharSequence encodedString) { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - DataType field = fieldNames.getType(i); - if (field != null) { - try { - field.decode(bitString, values, i, this); - } catch (Exception e) { - throw new DecodingException("Unable to decode " + fieldNames.get(i), e); - } - } else { - throw new DecodingException("Field not found: '" + fieldNames.get(i) + "'"); + DataType field = fieldNames.get(i); + try { + field.decode(bitString, values, i, this); + } catch (Exception e) { + throw new DecodingException("Unable to decode " + field, e); } } } catch (Exception e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 324931db..0d2f0a09 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; @@ -21,14 +20,6 @@ public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } - protected final DataType get(E key) { - Integer index = fieldNames.getIndex(key); - if (index != null) { - return fieldNames.getType(index); - } - return null; - } - @Override public final boolean hasField(E key) { return fieldNames.getIndex(key) != null; @@ -41,7 +32,7 @@ public final boolean isDirty() { } int size = fieldNames.size(); for (int i = 0; i < size; i++) { - if (fieldNames.getType(i).isDirty(values, i)) { + if (fieldNames.get(i).isDirty(values, i)) { return true; } } @@ -53,7 +44,7 @@ public final void setDirty(boolean dirty) { this.dirty = dirty; int size = fieldNames.size(); for (int i = 0; i < size; i++) { - fieldNames.getType(i).setDirty(values, i, dirty); + fieldNames.get(i).setDirty(values, i, dirty); } } @@ -67,7 +58,7 @@ public final Object getFieldValue(E fieldName) { protected final Object getFieldValueUnsafe(E fieldName) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { - return fieldNames.getType(index).get(values, index); + return fieldNames.get(index).get(values, index); } else { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } @@ -82,7 +73,7 @@ public final void setFieldValue(E fieldName, Object value) { protected final void setFieldValueUnsafe(E fieldName, Object value) { Integer index = fieldNames.getIndex(fieldName); if (index != null) { - fieldNames.getType(index).set(values, index, value); + fieldNames.get(index).set(values, index, value); dirty = true; } else { throw new InvalidFieldException(fieldName + " not found"); @@ -96,8 +87,7 @@ public String toString() { sb.append("{name=").append(getClass().getSimpleName()); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - E field = fieldNames.get(i); - sb.append(", ").append(field.getName()).append('=').append(values[i]); + sb.append(", ").append(fieldNames.get(i).getName()).append('=').append(values[i]); } sb.append('}'); return sb.toString(); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index a9c163f2..d64fbae6 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -13,7 +13,7 @@ public class EncodableFixedIntegerRangeTest { @Test public void testEncode1() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); IntegerSet integerSet = new IntegerSet(); integerSet.add(28); BitString builder = new BitString(); @@ -23,7 +23,7 @@ public void testEncode1() throws EncodingException { @Test public void testEncode2() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); IntegerSet integerSet = new IntegerSet(); integerSet.add(29); BitString builder = new BitString(); @@ -33,13 +33,13 @@ public void testEncode2() throws EncodingException { @Test public void testDecode1() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); } @Test public void testDecode2() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(); + EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 7f312681..d527d26e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -10,7 +10,7 @@ public class EncodableOptimizedFixedRangeTest { - private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange<>(); + private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange<>(""); @Test public void testEncode1() { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index db142349..360cd604 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -151,7 +151,7 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - EncodableFixedIntegerList encodable = new EncodableFixedIntegerList<>(2, 2, null); + EncodableFixedIntegerList encodable = new EncodableFixedIntegerList<>("", 2, 2, null); return encodable.decode(BitString.of(str), null); } From e10dedd192dd4b5b975adfa83b2665cbaf192a06 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 16:55:19 -0500 Subject: [PATCH 115/146] add some tostring --- .../main/java/com/iab/gpp/encoder/datatype/DataType.java | 7 ++++++- .../datatype/EncodableArrayOfFixedIntegerRanges.java | 5 +++++ .../iab/gpp/encoder/datatype/EncodableFixedBitfield.java | 5 +++++ .../iab/gpp/encoder/datatype/EncodableFixedInteger.java | 5 +++++ .../gpp/encoder/datatype/EncodableFixedIntegerList.java | 5 +++++ .../com/iab/gpp/encoder/datatype/EncodableFixedString.java | 5 +++++ .../main/java/com/iab/gpp/encoder/field/FieldNames.java | 4 ++-- 7 files changed, 33 insertions(+), 3 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index a01d1385..3dee0b27 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -10,7 +10,7 @@ public abstract class DataType & FieldKey, T> { - private final String name; + protected final String name; private final Predicate validator; protected DataType(String name, Predicate validator) { @@ -22,6 +22,11 @@ public final String getName() { return name; } + @Override + public String toString() { + return name + "=" + this.getClass().getSimpleName(); + } + protected final void validate(T v) { if (validator == null || validator.test(v)) { return; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index cdeed31b..4fcd35a9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -19,6 +19,11 @@ public EncodableArrayOfFixedIntegerRanges(String name, int keyBitStringLength, i this.typeBitStringLength = typeBitStringLength; } + @Override + public String toString() { + return name + "=N-ArrayOfRanges(" + keyBitStringLength + "," + typeBitStringLength + ")"; + } + @Override protected DirtyableList initialize() { return new DirtyableList<>(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index dd524d41..97c0f5c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -17,6 +17,11 @@ public EncodableFixedBitfield(String name, int numElements) { this.numElements = numElements; } + @Override + public String toString() { + return name + "=Bitfield(" + numElements + ")"; + } + @Override protected IntegerSet initialize() { return new IntegerSet(numElements); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index c628147e..f525cbba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -21,6 +21,11 @@ public EncodableFixedInteger(String name, int bitStringLength, Integer initial, public EncodableFixedInteger(String name, int bitStringLength, Integer initial) { this(name, bitStringLength, initial, null); } + + @Override + public String toString() { + return name + "=Int(" + bitStringLength + ")"; + } @Override protected Integer initialize() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index df5fbc70..a79cdb9f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -20,6 +20,11 @@ public EncodableFixedIntegerList(String name, int elementBitStringLength, int nu this.numElements = numElements; } + @Override + public String toString() { + return name + "=Int(" + elementBitStringLength + "," + numElements + ")"; + } + @Override protected FixedIntegerList initialize() { return new FixedIntegerList(elementBitStringLength, numElements); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 60d1472b..696b65d9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -17,6 +17,11 @@ public EncodableFixedString(String name, int stringLength, String initial) { this.stringLength = stringLength; this.initial = initial; } + + @Override + public String toString() { + return name + "=String(" + stringLength + ")"; + } @Override protected String initialize() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index e4bd68d6..6159bc92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -7,13 +7,13 @@ public final class FieldNames & FieldKey> { private final LinkedHashMap map; private final Integer[] indices; - private final Object[] types; + private final DataType[] types; @SafeVarargs FieldNames(E... keys) { this.map = new LinkedHashMap<>(); this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; - this.types = new Object[keys.length]; + this.types = new DataType[keys.length]; for (int i = 0; i < keys.length; i++) { E key = keys[i]; this.map.put(key, key); From c430b5fa56b3f555a2c490fe1dc2fbbe092e2d5e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 20:19:57 -0500 Subject: [PATCH 116/146] presize gpp section map --- .../src/main/java/com/iab/gpp/encoder/GppModel.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 491bb6ec..bc1f2eb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -70,10 +70,12 @@ public class GppModel extends AbstractEncodable { } } - private final HashMap> sections = new HashMap<>(); + private final HashMap> sections; private final HeaderV1 header; public GppModel() { + // empirically, most gpp strings have around 2 sections, so pad for more + this.sections = new HashMap<>(4); this.header = new HeaderV1(); } From 86c27fc87fdab08a83fadfb1d56ef77c63676787 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 20:49:14 -0500 Subject: [PATCH 117/146] clean up exceptions --- .../EncodableArrayOfFixedIntegerRanges.java | 36 ++++++++----------- .../encoder/datatype/EncodableBoolean.java | 12 ++----- .../encoder/datatype/EncodableDatetime.java | 12 ++----- .../datatype/EncodableFibonacciInteger.java | 12 ++----- .../EncodableFibonacciIntegerRange.java | 12 ++----- .../datatype/EncodableFixedBitfield.java | 12 ++----- .../datatype/EncodableFixedInteger.java | 12 ++----- .../datatype/EncodableFixedIntegerList.java | 12 ++----- .../datatype/EncodableFixedIntegerRange.java | 12 ++----- .../datatype/EncodableFixedString.java | 12 ++----- .../datatype/EncodableFlexibleBitfield.java | 12 ++----- .../EncodableOptimizedFixedRange.java | 12 ++----- .../segment/AbstractBase64Segment.java | 10 ++++-- 13 files changed, 43 insertions(+), 135 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 4fcd35a9..86fa95e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -31,34 +31,26 @@ protected DirtyableList initialize() { @Override protected void encode(BitString sb, DirtyableList entries, EncodableSegment segment) { - try { - sb.writeInt(entries.size(), 12); - for (RangeEntry entry : entries) { - sb.writeInt(entry.getKey(), keyBitStringLength); - sb.writeInt(entry.getType(), typeBitStringLength); - FixedIntegerRangeEncoder.encode(sb, entry.getIds()); - } - } catch (Exception e) { - throw new EncodingException(e); + sb.writeInt(entries.size(), 12); + for (RangeEntry entry : entries) { + sb.writeInt(entry.getKey(), keyBitStringLength); + sb.writeInt(entry.getType(), typeBitStringLength); + FixedIntegerRangeEncoder.encode(sb, entry.getIds()); } } @Override protected DirtyableList decode(BitString reader, EncodableSegment segment) { - try { - int size = reader.readInt(12); - DirtyableList value = initialize(); - for (int i = 0; i < size; i++) { - int key = reader.readInt(keyBitStringLength); - int type = reader.readInt(typeBitStringLength); - IntegerSet ids = FixedIntegerRangeEncoder.decode(reader); - RangeEntry entry = new RangeEntry(key, type, ids); - value.add(entry); - } - return value; - } catch (Exception e) { - throw new DecodingException(e); + int size = reader.readInt(12); + DirtyableList value = initialize(); + for (int i = 0; i < size; i++) { + int key = reader.readInt(keyBitStringLength); + int type = reader.readInt(typeBitStringLength); + IntegerSet ids = FixedIntegerRangeEncoder.decode(reader); + RangeEntry entry = new RangeEntry(key, type, ids); + value.add(entry); } + return value; } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 7ab87584..e79a5563 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -22,19 +22,11 @@ protected Boolean initialize() { @Override protected void encode(BitString builder, Boolean value, EncodableSegment segment){ - try { - builder.writeBoolean(value); - } catch (Exception e) { - throw new EncodingException(e); - } + builder.writeBoolean(value); } @Override protected Boolean decode(BitString reader, EncodableSegment segment) { - try { - return reader.readBoolean(); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readBoolean(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index dbb829a0..ced43522 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -21,19 +21,11 @@ protected Instant initialize() { @Override protected void encode(BitString builder, Instant value, EncodableSegment segment) { - try { - DatetimeEncoder.encode(builder, value); - } catch (Exception e) { - throw new EncodingException(e); - } + DatetimeEncoder.encode(builder, value); } @Override protected Instant decode(BitString reader, EncodableSegment segment) { - try { - return DatetimeEncoder.decode(reader); - } catch (Exception e) { - throw new DecodingException(e); - } + return DatetimeEncoder.decode(reader); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 6afe0abd..3eb14548 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -22,19 +22,11 @@ protected Integer initialize() { @Override protected void encode(BitString builder, Integer value, EncodableSegment segment) { - try { - builder.writeFibonacci(value); - } catch (Exception e) { - throw new EncodingException(e); - } + builder.writeFibonacci(value); } @Override protected Integer decode(BitString reader, EncodableSegment segment) { - try { - return reader.readFibonacci(); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readFibonacci(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index a1401944..3fc74300 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -21,20 +21,12 @@ public IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - FibonacciIntegerRangeEncoder.encode(builder, value); - } catch (Exception e) { - throw new EncodingException(e); - } + FibonacciIntegerRangeEncoder.encode(builder, value); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return FibonacciIntegerRangeEncoder.decode(reader); - } catch (Exception e) { - throw new DecodingException(e); - } + return FibonacciIntegerRangeEncoder.decode(reader); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 97c0f5c5..70772d57 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -29,20 +29,12 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - FixedBitfieldEncoder.encode(builder, value, this.numElements); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedBitfieldEncoder.encode(builder, value, this.numElements); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return reader.readIntegerSet(this.numElements); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readIntegerSet(this.numElements); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index f525cbba..9517475f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -34,19 +34,11 @@ protected Integer initialize() { @Override protected void encode(BitString builder, Integer value, EncodableSegment segment) { - try { - builder.writeInt(value, this.bitStringLength); - } catch (Exception e) { - throw new EncodingException(e); - } + builder.writeInt(value, this.bitStringLength); } @Override protected Integer decode(BitString reader, EncodableSegment segment) { - try { - return IntegerCache.valueOf(reader.readInt(bitStringLength)); - } catch (Exception e) { - throw new DecodingException(e); - } + return IntegerCache.valueOf(reader.readInt(bitStringLength)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index a79cdb9f..71099a1f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -32,20 +32,12 @@ protected FixedIntegerList initialize() { @Override protected void encode(BitString builder, FixedIntegerList value, EncodableSegment segment) { - try { - FixedIntegerListEncoder.encode(builder, value, this.elementBitStringLength, this.numElements); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedIntegerListEncoder.encode(builder, value, this.elementBitStringLength, this.numElements); } @Override protected FixedIntegerList decode(BitString reader, EncodableSegment segment) { - try { - return reader.readFixedIntegerList(elementBitStringLength, numElements); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readFixedIntegerList(elementBitStringLength, numElements); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index f50abad4..703df231 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -21,20 +21,12 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - FixedIntegerRangeEncoder.encode(builder, value); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedIntegerRangeEncoder.encode(builder, value); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return FixedIntegerRangeEncoder.decode(reader); - } catch (Exception e) { - throw new DecodingException(e); - } + return FixedIntegerRangeEncoder.decode(reader); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 696b65d9..0cb1925f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -30,19 +30,11 @@ protected String initialize() { @Override protected void encode(BitString builder, String value, EncodableSegment segment) { - try { - FixedStringEncoder.encode(builder, value, this.stringLength); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedStringEncoder.encode(builder, value, this.stringLength); } @Override protected String decode(BitString reader, EncodableSegment segment) { - try { - return FixedStringEncoder.decode(reader, this.stringLength); - } catch (Exception e) { - throw new DecodingException(e); - } + return FixedStringEncoder.decode(reader, this.stringLength); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index aae841a2..e4a10071 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -25,20 +25,12 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.extract(segment)); - } catch (Exception e) { - throw new EncodingException(e); - } + FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.extract(segment)); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return reader.readIntegerSet(getLengthSupplier.extract(segment)); - } catch (Exception e) { - throw new DecodingException(e); - } + return reader.readIntegerSet(getLengthSupplier.extract(segment)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index f41dd0b1..755d1a39 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -22,20 +22,12 @@ protected IntegerSet initialize() { @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { - try { - OptimizedFixedRangeEncoder.encode(builder, value); - } catch (Exception e) { - throw new EncodingException(e); - } + OptimizedFixedRangeEncoder.encode(builder, value); } @Override protected IntegerSet decode(BitString reader, EncodableSegment segment) { - try { - return OptimizedFixedRangeEncoder.decode(reader); - } catch (Exception e) { - throw new DecodingException(e); - } + return OptimizedFixedRangeEncoder.decode(reader); } @SuppressWarnings("unchecked") diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 28c3cc80..c2c65d40 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -20,9 +20,13 @@ protected final CharSequence doEncode() { BitString bitString = new BitString(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { - fieldNames.get(i).encode(bitString, values, i, this); + DataType field = fieldNames.get(i); + try { + field.encode(bitString, values, i, this); + } catch (Exception e) { + throw new DecodingException("Unable to decode " + field.getName(), e); + } } - return getBase64UrlEncoder().encode(bitString); } @@ -36,7 +40,7 @@ protected final void doDecode(CharSequence encodedString) { try { field.decode(bitString, values, i, this); } catch (Exception e) { - throw new DecodingException("Unable to decode " + field, e); + throw new DecodingException("Unable to decode " + field.getName(), e); } } } catch (Exception e) { From dd962e93a31d39a4dfa6fec9e6f4a0aa27f56a00 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 20:57:53 -0500 Subject: [PATCH 118/146] more clean up --- .../gpp/encoder/section/EncodableSection.java | 26 +++++++------------ .../segment/AbstractBase64Segment.java | 3 ++- .../com/iab/gpp/encoder/GppModelTest.java | 3 +++ 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 4b10013f..8ccce1f7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; @@ -30,30 +32,22 @@ protected final EncodableSegment getSegment(int index) { public abstract int getVersion(); + // this is a default implementation for single segment sections @Override protected void doDecode(CharSequence encodedString) { - int numSegments = size(); - if (numSegments == 1) { - getSegment(0).decode(encodedString); - return; - } - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < numSegments; i++) { - getSegment(i).decode(encodedSegments.get(i)); + if (size() > 1) { + throw new DecodingException("too many sections to decode"); } + getSegment(0).decode(encodedString); } + // this is a default implementation for single segment sections @Override protected CharSequence doEncode() { - int numSegments = size(); - if (numSegments == 1) { - return getSegment(0).encodeCharSequence(); - } - List encodedSegments = new ArrayList<>(numSegments); - for (int i = 0; i < numSegments; i++) { - encodedSegments.add(getSegment(i).encodeCharSequence()); + if (size() > 1) { + throw new EncodingException("too many sections to encode"); } - return SlicedCharSequence.join('.', encodedSegments); + return getSegment(0).encodeCharSequence(); } public final boolean hasField(FieldKey fieldName) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index c2c65d40..8e49f8e4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; @@ -24,7 +25,7 @@ protected final CharSequence doEncode() { try { field.encode(bitString, values, i, this); } catch (Exception e) { - throw new DecodingException("Unable to decode " + field.getName(), e); + throw new EncodingException("Unable to decode " + field.getName(), e); } } return getBase64UrlEncoder().encode(bitString); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 71aa195c..11721096 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -658,6 +658,9 @@ public void testEncode1() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, Arrays.asList(28)); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); + Assertions.assertEquals(true, gppModel.hasField(TcfEuV2.NAME, TcfEuV2Field.VERSION)); + Assertions.assertEquals(true, gppModel.getTcfEuV2Section().hasField(TcfEuV2Field.VERSION)); + gppModel.toString(); Assertions.assertEquals("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA", gppModel.encode()); } From f647e9b2f0bd71d9fd7c78613c0d268ba3a86a44 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 21:06:27 -0500 Subject: [PATCH 119/146] test field names to string --- .../main/java/com/iab/gpp/encoder/field/FieldNames.java | 8 ++++++++ .../java/com/iab/gpp/encoder/section/TcfEuV2Test.java | 1 + 2 files changed, 9 insertions(+) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 6159bc92..da24656b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,6 +1,9 @@ package com.iab.gpp.encoder.field; +import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedHashMap; +import java.util.stream.Stream; import com.iab.gpp.encoder.datatype.DataType; public final class FieldNames & FieldKey> { @@ -42,4 +45,9 @@ public E resolveKey(FieldKey key) { return map.get(key); } + @Override + public String toString() { + return Arrays.toString(types); + } + } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 404646ff..09f2d2a8 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -21,6 +21,7 @@ public void testEncode1() { tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals("CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", tcfEuV2.encode()); + TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES.toString(); } @Test From 0a3f100ce42594783265aff080116f219a2fcb2d Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 21:14:07 -0500 Subject: [PATCH 120/146] fix constant names --- .../EncodableArrayOfFixedIntegerRanges.java | 2 -- .../encoder/datatype/EncodableBoolean.java | 2 -- .../encoder/datatype/EncodableDatetime.java | 2 -- .../datatype/EncodableFibonacciInteger.java | 2 -- .../EncodableFibonacciIntegerRange.java | 2 -- .../datatype/EncodableFixedBitfield.java | 2 -- .../datatype/EncodableFixedInteger.java | 2 -- .../datatype/EncodableFixedIntegerList.java | 2 -- .../datatype/EncodableFixedIntegerRange.java | 2 -- .../datatype/EncodableFixedString.java | 2 -- .../datatype/EncodableFlexibleBitfield.java | 2 -- .../EncodableOptimizedFixedRange.java | 2 -- .../com/iab/gpp/encoder/field/FieldKey.java | 6 ++-- .../com/iab/gpp/encoder/field/FieldNames.java | 2 -- .../com/iab/gpp/encoder/field/UsCaField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsCoField.java | 20 ++++++------- .../com/iab/gpp/encoder/field/UsCtField.java | 20 ++++++------- .../com/iab/gpp/encoder/field/UsDeField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsFlField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsIaField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsMtField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsNatField.java | 30 +++++++++---------- .../com/iab/gpp/encoder/field/UsNeField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsNhField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsNjField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsOrField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsTnField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsTxField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsUtField.java | 22 +++++++------- .../com/iab/gpp/encoder/field/UsVaField.java | 20 ++++++------- .../gpp/encoder/section/EncodableSection.java | 2 -- 31 files changed, 180 insertions(+), 208 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 86fa95e5..2b7b53ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -3,8 +3,6 @@ import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index e79a5563..0a21bc52 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index ced43522..837598d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -3,8 +3,6 @@ import java.time.Instant; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 3eb14548..45972234 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 3fc74300..b0adc05f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 70772d57..e123bb19 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 9517475f..ba726136 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -2,8 +2,6 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 71099a1f..cfad7f65 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -4,8 +4,6 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 703df231..b3d3293d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 0cb1925f..ddf6b3f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -2,8 +2,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index e4a10071..7d46c137 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.SegmentValueProvider; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 755d1a39..5ff248fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -3,8 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 10b750da..7cef63c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -7,9 +7,9 @@ public interface FieldKey { DataType getType(); - public static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - public static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - public static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { + public static final Predicate VALIDATOR_012 = (n -> n >= 0 && n <= 2); + public static final Predicate VALIDATOR_12 = (n -> n >= 1 && n <= 2); + public static final Predicate VALIDATOR_LIST_012 = (l -> { for (int n : l) { if (n < 0 || n > 2) { return false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index da24656b..bf44d148 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.field; -import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedHashMap; -import java.util.stream.Stream; import com.iab.gpp.encoder.datatype.DataType; public final class FieldNames & FieldKey> { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 7cb4bb22..3df1a52e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -10,26 +10,26 @@ public enum UsCaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCa.VERSION)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), SHARING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_LIMIT_USE_NOTICE( - new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), SHARING_OPT_OUT( - new EncodableFixedInteger<>("SharingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, VALIDATOR_LIST_012)), PERSONAL_DATA_CONSENTS( - new EncodableFixedInteger<>("PersonalDataConsents",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("PersonalDataConsents",2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction",2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction",2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode",2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 84b431ec..eb27198d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -10,24 +10,24 @@ public enum UsCoField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCo.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), - SENSITIVE_DATA_PROCESSING(new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), + SENSITIVE_DATA_PROCESSING(new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 5aa4d8fa..bd06a729 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -10,24 +10,24 @@ public enum UsCtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCt.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index ad7a0a7e..eafe0c14 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -10,27 +10,27 @@ public enum UsDeField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsDe.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 3962017d..ec76b719 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -8,26 +8,26 @@ public enum UsFlField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsFl.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)); private final DataType type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index f002508e..cd6ebb8e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -10,27 +10,27 @@ public enum UsIaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsIa.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 43e39200..e35c7dc4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -10,26 +10,26 @@ public enum UsMtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsMt.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 791f5c92..56af13a5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -10,34 +10,34 @@ public enum UsNatField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNat.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), SHARING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, VALIDATOR_012)), SENSITIVE_DATA_LIMIT_USE_NOTICE( - new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), SHARING_OPT_OUT( - new EncodableFixedInteger<>("SharingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), PERSONAL_DATA_CONSENTS( - new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index efa39c8b..4783273f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -10,27 +10,27 @@ public enum UsNeField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNe.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 3808b71d..f296551a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -10,26 +10,26 @@ public enum UsNhField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNh.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index e0a5af8d..061cb5ae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -10,26 +10,26 @@ public enum UsNjField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNj.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut",2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 10, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 10, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index f9cb55a9..4061920d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -10,26 +10,26 @@ public enum UsOrField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsOr.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 11, nullableBooleanAsTwoBitIntegerListValidator)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 11, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index f83e0207..83cba306 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -10,27 +10,27 @@ public enum UsTnField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsTn.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice",2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index eb16dbeb..91d5cc17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -10,27 +10,27 @@ public enum UsTxField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsTx.VERSION)), PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( - new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 47c9ba4c..0c36f6be 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -8,27 +8,27 @@ public enum UsUtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsUt.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut",2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut",2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)); private final DataType type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 9f013cc2..287eaf55 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -8,25 +8,25 @@ public enum UsVaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsVa.VERSION)), SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( - new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, nullableBooleanAsTwoBitIntegerListValidator)), + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, nonNullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, nullableBooleanAsTwoBitIntegerValidator)); + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)); private final DataType type; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 8ccce1f7..169bf43e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; From 558aaa2e88566654b159e90d4e7d09ceac5969d6 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 10 Feb 2026 21:15:19 -0500 Subject: [PATCH 121/146] optimize validator --- .../src/main/java/com/iab/gpp/encoder/field/FieldKey.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 7cef63c2..a56603f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -10,7 +10,9 @@ public interface FieldKey { public static final Predicate VALIDATOR_012 = (n -> n >= 0 && n <= 2); public static final Predicate VALIDATOR_12 = (n -> n >= 1 && n <= 2); public static final Predicate VALIDATOR_LIST_012 = (l -> { - for (int n : l) { + int size = l.size(); + for (int i = 0; i < size; i++) { + int n = l.getInt(i); if (n < 0 || n > 2) { return false; } From 1fb8dabaac5cec09e20589a7946ed79accce5835 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 11 Feb 2026 10:28:59 -0500 Subject: [PATCH 122/146] move source and add jacoco --- iabgpp-encoder/pom.xml | 12 ++++++++---- iabgpp-extras-jackson/pom.xml | 12 ++++++++---- iabgpp-extras/pom.xml | 12 ++++++++---- pom.xml | 19 +++++++++++++++++++ 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index 0592e79a..2dd832a9 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -27,10 +27,18 @@ maven-surefire-plugin + + org.jacoco + jacoco-maven-plugin + org.apache.maven.plugins maven-javadoc-plugin + + org.apache.maven.plugins + maven-source-plugin + com.diffplug.spotless spotless-maven-plugin @@ -43,10 +51,6 @@ release - - org.apache.maven.plugins - maven-source-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index ac1a1a3f..8c0abb61 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -46,10 +46,18 @@ maven-surefire-plugin + + org.jacoco + jacoco-maven-plugin + org.apache.maven.plugins maven-javadoc-plugin + + org.apache.maven.plugins + maven-source-plugin + com.diffplug.spotless spotless-maven-plugin @@ -62,10 +70,6 @@ release - - org.apache.maven.plugins - maven-source-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index 6673191a..ddfd0e54 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -18,10 +18,18 @@ maven-surefire-plugin + + org.jacoco + jacoco-maven-plugin + org.apache.maven.plugins maven-javadoc-plugin + + org.apache.maven.plugins + maven-source-plugin + com.diffplug.spotless spotless-maven-plugin @@ -34,10 +42,6 @@ release - - org.apache.maven.plugins - maven-source-plugin - org.apache.maven.plugins maven-gpg-plugin diff --git a/pom.xml b/pom.xml index 7c1921bb..19a38623 100644 --- a/pom.xml +++ b/pom.xml @@ -66,6 +66,25 @@ maven-surefire-plugin 2.22.2 + + org.jacoco + jacoco-maven-plugin + 0.8.14 + + + + prepare-agent + + + + report + test + + report + + + + com.diffplug.spotless spotless-maven-plugin From ff3f858c65fde9a033a410916eca29fdeddd17e8 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 10:23:42 -0500 Subject: [PATCH 123/146] use SNAPSHOT instead of RC1 --- iabgpp-encoder/pom.xml | 2 +- iabgpp-extras-jackson/pom.xml | 4 ++-- iabgpp-extras/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index 07caf281..3eecb8a6 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 4.0.0-RC1 + 4.0.0-SNAPSHOT iabgpp-encoder diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index b62612ba..a594e513 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -7,7 +7,7 @@ iabgpp-core com.iabgpp - 4.0.0-RC1 + 4.0.0-SNAPSHOT iabgpp-extras-jackson @@ -24,7 +24,7 @@ com.iabgpp iabgpp-extras - 4.0.0-RC1 + 4.0.0-SNAPSHOT diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index b14f682e..52175c2a 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 4.0.0-RC1 + 4.0.0-SNAPSHOT iabgpp-extras diff --git a/pom.xml b/pom.xml index b79ba53c..2965bb86 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iabgpp iabgpp-core - 4.0.0-RC1 + 4.0.0-SNAPSHOT IAB GPP Core Library https://github.com/IABTechLabs/iabtcf-java Encode and decode consent information with the IAB GPP v3.0. From 0ff66acc0d7f047355ee97abbb3fb42430fc1bc7 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 10:28:08 -0500 Subject: [PATCH 124/146] spotless apply --- .../java/com/iab/gpp/encoder/GppModel.java | 26 +- .../base64/AbstractBase64UrlEncoder.java | 23 +- .../base64/CompressedBase64UrlEncoder.java | 9 +- .../base64/TraditionalBase64UrlEncoder.java | 5 +- .../com/iab/gpp/encoder/bitstring/BitSet.java | 38 +- .../iab/gpp/encoder/bitstring/BitString.java | 9 +- .../AbstractDirtyableBitStringDataType.java | 5 +- .../AbstractEncodableBitStringDataType.java | 11 +- .../iab/gpp/encoder/datatype/DataType.java | 22 +- .../iab/gpp/encoder/datatype/Dirtyable.java | 1 + .../EncodableArrayOfFixedIntegerRanges.java | 14 +- .../encoder/datatype/EncodableBoolean.java | 5 +- .../encoder/datatype/EncodableDatetime.java | 5 +- .../datatype/EncodableFibonacciInteger.java | 3 +- .../EncodableFibonacciIntegerRange.java | 5 +- .../datatype/EncodableFixedBitfield.java | 5 +- .../datatype/EncodableFixedInteger.java | 14 +- .../datatype/EncodableFixedIntegerList.java | 13 +- .../datatype/EncodableFixedIntegerRange.java | 5 +- .../datatype/EncodableFixedString.java | 7 +- .../datatype/EncodableFlexibleBitfield.java | 8 +- .../EncodableOptimizedFixedRange.java | 6 +- .../encoder/datatype/FixedIntegerList.java | 14 +- .../gpp/encoder/datatype/IntegerCache.java | 5 +- .../iab/gpp/encoder/datatype/IntegerSet.java | 17 +- .../iab/gpp/encoder/datatype/RangeEntry.java | 1 - .../encoder/datatype/UnencodableBoolean.java | 6 +- .../datatype/UnencodableCharacter.java | 8 +- .../encoder/datatype/UnencodableInteger.java | 3 +- .../datatype/encoder/DatetimeEncoder.java | 2 +- .../encoder/FibonacciIntegerEncoder.java | 1 + .../encoder/FibonacciIntegerRangeEncoder.java | 2 +- .../encoder/FixedIntegerListEncoder.java | 5 +- .../encoder/FixedIntegerRangeEncoder.java | 2 +- .../datatype/encoder/FixedStringEncoder.java | 1 + .../com/iab/gpp/encoder/field/FieldKey.java | 23 +- .../com/iab/gpp/encoder/field/FieldNames.java | 9 +- .../iab/gpp/encoder/field/HeaderV1Field.java | 12 +- .../iab/gpp/encoder/field/TcfCaV1Field.java | 79 +++-- .../iab/gpp/encoder/field/TcfEuV2Field.java | 96 ++--- .../com/iab/gpp/encoder/field/UsCaField.java | 67 ++-- .../com/iab/gpp/encoder/field/UsCoField.java | 53 ++- .../com/iab/gpp/encoder/field/UsCtField.java | 55 ++- .../com/iab/gpp/encoder/field/UsDeField.java | 52 ++- .../com/iab/gpp/encoder/field/UsFlField.java | 44 ++- .../com/iab/gpp/encoder/field/UsIaField.java | 52 ++- .../com/iab/gpp/encoder/field/UsMtField.java | 57 ++- .../com/iab/gpp/encoder/field/UsNatField.java | 75 ++-- .../com/iab/gpp/encoder/field/UsNeField.java | 52 ++- .../com/iab/gpp/encoder/field/UsNhField.java | 55 ++- .../com/iab/gpp/encoder/field/UsNjField.java | 57 ++- .../com/iab/gpp/encoder/field/UsOrField.java | 55 ++- .../com/iab/gpp/encoder/field/UsTnField.java | 52 ++- .../com/iab/gpp/encoder/field/UsTxField.java | 52 ++- .../com/iab/gpp/encoder/field/UsUtField.java | 43 ++- .../com/iab/gpp/encoder/field/UsVaField.java | 39 +-- .../com/iab/gpp/encoder/field/UspV1Field.java | 19 +- .../encoder/section/AbstractEncodable.java | 3 +- .../encoder/section/AbstractUsSection.java | 1 - .../section/AbstractUsSectionWithGpc.java | 14 +- .../gpp/encoder/section/EncodableSection.java | 10 +- .../encoder/section/SlicedCharSequence.java | 2 - .../com/iab/gpp/encoder/section/TcfCaV1.java | 36 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 39 ++- .../com/iab/gpp/encoder/section/UsCa.java | 4 +- .../com/iab/gpp/encoder/section/UsCo.java | 4 +- .../com/iab/gpp/encoder/section/UsCt.java | 4 +- .../com/iab/gpp/encoder/section/UsDe.java | 4 +- .../com/iab/gpp/encoder/section/UsIa.java | 4 +- .../com/iab/gpp/encoder/section/UsMt.java | 4 +- .../com/iab/gpp/encoder/section/UsNe.java | 5 +- .../com/iab/gpp/encoder/section/UsNh.java | 4 +- .../com/iab/gpp/encoder/section/UsNj.java | 4 +- .../com/iab/gpp/encoder/section/UsOr.java | 4 +- .../com/iab/gpp/encoder/section/UsTn.java | 4 +- .../com/iab/gpp/encoder/section/UsTx.java | 4 +- .../com/iab/gpp/encoder/section/UsUt.java | 2 - .../segment/AbstractBase64Segment.java | 11 +- .../AbstractLazilyEncodableSegment.java | 4 +- .../gpp/encoder/segment/Base64Segment.java | 1 - .../encoder/segment/SegmentValueProvider.java | 5 +- .../segment/TraditionalBase64Segment.java | 4 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 6 +- .../gpp/encoder/segment/UspV1CoreSegment.java | 4 +- .../com/iab/gpp/encoder/GppModelTest.java | 331 ++++++++++-------- .../TraditionalBase64UrlEncoderTest.java | 15 +- .../encoder/datatype/DirtyableListTest.java | 10 +- .../EncodableFixedIntegerRangeTest.java | 28 +- .../EncodableOptimizedFixedRangeTest.java | 33 +- .../datatype/FixedIntegerListEncoderTest.java | 12 +- .../datatype/FixedIntegerListTest.java | 4 +- .../datatype/encoder/BooleanEncoderTest.java | 6 +- .../datatype/encoder/DatetimeEncoderTest.java | 5 +- .../encoder/FibonacciIntegerEncoderTest.java | 14 +- .../FibonacciIntegerRangeEncoderTest.java | 16 +- .../encoder/FixedBitfieldEncoderTest.java | 15 +- .../encoder/FixedIntegerEncoderTest.java | 7 +- .../encoder/FixedIntegerRangeEncoderTest.java | 52 +-- .../encoder/FixedLongEncoderTest.java | 8 +- .../encoder/FixedStringEncoderTest.java | 7 +- .../datatype/encoder/IntegerSetTest.java | 22 +- .../iab/gpp/encoder/section/HeaderV1Test.java | 23 +- .../iab/gpp/encoder/section/TcfCaV1Test.java | 165 +++++---- .../iab/gpp/encoder/section/TcfEuV2Test.java | 314 +++++++++-------- .../com/iab/gpp/encoder/section/UsCaTest.java | 78 +++-- .../com/iab/gpp/encoder/section/UsCoTest.java | 58 +-- .../com/iab/gpp/encoder/section/UsCtTest.java | 66 ++-- .../com/iab/gpp/encoder/section/UsDeTest.java | 79 +++-- .../com/iab/gpp/encoder/section/UsFlTest.java | 27 +- .../com/iab/gpp/encoder/section/UsIaTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsMtTest.java | 70 ++-- .../iab/gpp/encoder/section/UsNatTest.java | 98 +++--- .../com/iab/gpp/encoder/section/UsNeTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsNhTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsNjTest.java | 79 +++-- .../com/iab/gpp/encoder/section/UsOrTest.java | 73 ++-- .../com/iab/gpp/encoder/section/UsTnTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsTxTest.java | 70 ++-- .../com/iab/gpp/encoder/section/UsUtTest.java | 68 ++-- .../com/iab/gpp/encoder/section/UsVaTest.java | 25 +- .../iab/gpp/encoder/section/UspV1Test.java | 5 +- .../com/iab/gpp/extras/jackson/Loader.java | 4 +- .../com/iab/gpp/extras/jackson/cmp/Cmp.java | 6 +- .../gpp/extras/jackson/gvl/DataCategory.java | 2 - .../com/iab/gpp/extras/jackson/gvl/Gvl.java | 25 +- .../iab/gpp/extras/jackson/gvl/Overflow.java | 1 - .../iab/gpp/extras/jackson/gvl/Purpose.java | 8 +- .../extras/jackson/gvl/SpecialFeature.java | 4 +- .../extras/jackson/gvl/SpecialPurpose.java | 8 +- .../iab/gpp/extras/jackson/gvl/Vendor.java | 38 +- .../iab/gpp/extras/jackson/gvl/VendorUrl.java | 1 - .../gpp/extras/jackson/cmp/CmpListTest.java | 14 +- .../gpp/extras/jackson/gvl/GvlCanadaTest.java | 189 +++++----- .../iab/gpp/extras/jackson/gvl/GvlV2Test.java | 60 ++-- .../iab/gpp/extras/jackson/gvl/GvlV3Test.java | 185 ++++++---- .../java/com/iab/gpp/extras/cmp/CmpList.java | 1 - .../com/iab/gpp/extras/gvl/DataCategory.java | 1 - .../com/iab/gpp/extras/gvl/DataRetention.java | 2 - .../main/java/com/iab/gpp/extras/gvl/Gvl.java | 2 +- .../java/com/iab/gpp/extras/gvl/Overflow.java | 5 +- .../java/com/iab/gpp/extras/gvl/Purpose.java | 10 +- .../iab/gpp/extras/gvl/SpecialFeature.java | 4 +- .../iab/gpp/extras/gvl/SpecialPurpose.java | 8 +- .../java/com/iab/gpp/extras/gvl/Vendor.java | 62 ++-- .../com/iab/gpp/extras/gvl/VendorUrl.java | 1 - 145 files changed, 2320 insertions(+), 2079 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index bc1f2eb1..7ab69f1c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -1,10 +1,5 @@ package com.iab.gpp.encoder; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.PrimitiveIterator; -import java.util.function.Supplier; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; @@ -31,13 +26,19 @@ import com.iab.gpp.encoder.section.UsUt; import com.iab.gpp.encoder.section.UsVa; import com.iab.gpp.encoder.section.UspV1; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.PrimitiveIterator; +import java.util.function.Supplier; public class GppModel extends AbstractEncodable { // NOTE: we genrally use concrete types to avoid the cost of interface calls - private static final HashMap>> SECTION_ID_TO_CONSTRUCTOR = new HashMap<>(); + private static final HashMap>> SECTION_ID_TO_CONSTRUCTOR = + new HashMap<>(); private static final HashMap SECTION_NAME_TO_ID = new HashMap<>(); - + static { List>> constructors = new ArrayList<>(); @@ -265,7 +266,7 @@ public List getSectionIds() { protected CharSequence doEncode() { List encodedSections = new ArrayList<>(); encodedSections.add(header.encodeCharSequence()); - for (Integer sectionId: header.getSectionsIds()) { + for (Integer sectionId : header.getSectionsIds()) { EncodableSection section = sections.get(sectionId); encodedSections.add(section.encodeCharSequence()); } @@ -280,7 +281,7 @@ protected void doDecode(CharSequence str) { header.getSectionsIds().clear(); } - if(str != null && !str.isEmpty()) { + if (str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); header.decode(encodedSections.get(0)); @@ -336,7 +337,7 @@ public String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append('[').append(header); - for (Integer sectionId: header.getSectionsIds()) { + for (Integer sectionId : header.getSectionsIds()) { EncodableSection section = sections.get(sectionId); sb.append(", ").append(section); } @@ -349,7 +350,7 @@ public boolean isDirty() { if (header.isDirty()) { return true; } - for (Integer sectionId: header.getSectionsIds()) { + for (Integer sectionId : header.getSectionsIds()) { EncodableSection section = sections.get(sectionId); if (section != null && section.isDirty()) { return true; @@ -361,12 +362,11 @@ public boolean isDirty() { @Override public void setDirty(boolean dirty) { header.setDirty(dirty); - for (Integer sectionId: header.getSectionsIds()) { + for (Integer sectionId : header.getSectionsIds()) { EncodableSection section = sections.get(sectionId); if (section != null) { section.setDirty(true); } } } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 5d56cd5e..7e2f413f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -1,10 +1,10 @@ package com.iab.gpp.encoder.base64; -import java.util.Arrays; import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import java.util.Arrays; public abstract class AbstractBase64UrlEncoder { @@ -12,13 +12,17 @@ public abstract class AbstractBase64UrlEncoder { private static final int BASE64_BITS = 6; private static final int NO_SYMBOL = -1; + /** * Base 64 URL character set. Different from standard Base64 char set in that '+' and '/' are * replaced with '-' and '_'. */ - private static final String DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + private static final String DICT = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + private static final int REVERSE_DICT_SIZE = 128; private static final int[] REVERSE_DICT = new int[REVERSE_DICT_SIZE]; + static { Arrays.fill(REVERSE_DICT, NO_SYMBOL); for (int i = 0; i < DICT.length(); i++) { @@ -59,9 +63,9 @@ public BitString decode(CharSequence str) { throw new DecodingException("Undecodable Base64URL string"); } int bits0 = b1 << 18 | b2 << 12 | b3 << 6 | b4; - words[dst++] = (byte)(bits0 >> 16); - words[dst++] = (byte)(bits0 >> 8); - words[dst++] = (byte)(bits0); + words[dst++] = (byte) (bits0 >> 16); + words[dst++] = (byte) (bits0 >> 8); + words[dst++] = (byte) (bits0); } if (length > limit) { remainder(str, words, length, src, dst); @@ -72,7 +76,8 @@ public BitString decode(CharSequence str) { } } - private static final void remainder(CharSequence str, byte[] words, int length, int src, int dst) { + private static final void remainder( + CharSequence str, byte[] words, int length, int src, int dst) { int b1 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; src++; int b2 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; @@ -85,8 +90,8 @@ private static final void remainder(CharSequence str, byte[] words, int length, throw new DecodingException("Undecodable Base64URL string"); } int bits0 = b1 << 18 | b2 << 12 | b3 << 6 | b4; - words[dst++] = (byte)(bits0 >> 16); - words[dst++] = (byte)(bits0 >> 8); - words[dst++] = (byte)(bits0); + words[dst++] = (byte) (bits0 >> 16); + words[dst++] = (byte) (bits0 >> 8); + words[dst++] = (byte) (bits0); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java index b4527851..cdeff122 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/CompressedBase64UrlEncoder.java @@ -6,9 +6,7 @@ public final class CompressedBase64UrlEncoder extends AbstractBase64UrlEncoder { private static final CompressedBase64UrlEncoder instance = new CompressedBase64UrlEncoder(); - private CompressedBase64UrlEncoder() { - - } + private CompressedBase64UrlEncoder() {} public static CompressedBase64UrlEncoder getInstance() { return instance; @@ -17,7 +15,7 @@ public static CompressedBase64UrlEncoder getInstance() { @Override protected void pad(BitString bitString) { int remainder = bitString.length() % 8; - if(remainder > 0) { + if (remainder > 0) { int padding = 8 - remainder; for (int i = 0; i < padding; i++) { bitString.writeBoolean(false); @@ -25,12 +23,11 @@ protected void pad(BitString bitString) { } remainder = bitString.length() % 6; - if(remainder > 0) { + if (remainder > 0) { int padding = 6 - remainder; for (int i = 0; i < padding; i++) { bitString.writeBoolean(false); } } } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java index d26e71cf..a234b2b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoder.java @@ -6,9 +6,7 @@ public final class TraditionalBase64UrlEncoder extends AbstractBase64UrlEncoder private static final TraditionalBase64UrlEncoder instance = new TraditionalBase64UrlEncoder(); - private TraditionalBase64UrlEncoder() { - - } + private TraditionalBase64UrlEncoder() {} public static TraditionalBase64UrlEncoder getInstance() { return instance; @@ -24,5 +22,4 @@ protected void pad(BitString bitString) { } } } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 8a640c6b..4f3b6b63 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,11 +1,11 @@ package com.iab.gpp.encoder.bitstring; -import java.util.Arrays; import com.iab.gpp.encoder.error.DecodingException; +import java.util.Arrays; // a thin version of java.util.BitSet public final class BitSet { - + private static final byte[] EMPTY = new byte[0]; private static final int ADDRESS_BITS_PER_WORD = 3; private static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; @@ -13,13 +13,13 @@ public final class BitSet { private static final int MODULO = BITS_PER_WORD - 1; private static final int CORRECTION = Integer.SIZE - BITS_PER_WORD; private static final int WORD_MASK = 0xff; - + private byte[] words; public BitSet(byte[] words) { this.words = words; } - + public BitSet(int initialCapacity) { this(new byte[wordIndex(initialCapacity) + 1]); } @@ -54,8 +54,7 @@ private byte[] ensureIndex(int wordIndex) { public boolean get(int bitIndex) { int wordIndex = wordIndex(bitIndex); byte[] words = this.words; - return (wordIndex < words.length) - && (words[wordIndex] & wordMask(bitIndex)) != 0; + return (wordIndex < words.length) && (words[wordIndex] & wordMask(bitIndex)) != 0; } public void clear(int from, int to) { @@ -77,21 +76,21 @@ public int nextSetBit(int fromIndex) { int wordsInUse = words.length; int u = wordIndex(fromIndex); if (u >= wordsInUse) { - return -1; + return -1; } int bit = fromIndex & MODULO; int word = words[u] & (WORD_MASK >>> bit); while (true) { - word &= WORD_MASK; - if (word != 0) { - return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word) - CORRECTION; - } - if (++u == wordsInUse) { - return -1; - } - word = words[u]; + word &= WORD_MASK; + if (word != 0) { + return (u * BITS_PER_WORD) + Integer.numberOfLeadingZeros(word) - CORRECTION; + } + if (++u == wordsInUse) { + return -1; + } + word = words[u]; } } @@ -121,8 +120,7 @@ public boolean set(int bitIndex, boolean value) { } return prior; } - - + public int readInt(int from, int to) { int startWordIndex = wordIndex(from); int startBit = from & MODULO; @@ -131,7 +129,7 @@ public int readInt(int from, int to) { // TODO: is this needed if the caller checks range? byte[] words = ensureIndex(endWordIndex); int out = 0; - for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { + for (int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { int word = words[wordIndex] & WORD_MASK; if (wordIndex == startWordIndex) { word &= WORD_MASK >>> startBit; @@ -146,7 +144,7 @@ public int readInt(int from, int to) { } return out; } - + public long readLong(int from, int to) { int startWordIndex = wordIndex(from); int startBit = from & MODULO; @@ -155,7 +153,7 @@ public long readLong(int from, int to) { // TODO: is this needed if the caller checks range? byte[] words = ensureIndex(endWordIndex); long out = 0; - for(int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { + for (int wordIndex = startWordIndex; wordIndex <= endWordIndex; wordIndex++) { long word = words[wordIndex] & WORD_MASK; if (wordIndex == startWordIndex) { word &= (WORD_MASK >>> startBit); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 8303dadf..cd56919f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -20,7 +20,7 @@ public BitString(BitSet bitSet, int length) { this.bitSet = bitSet; this.writeIndex = length; } - + public BitString() { this(new BitSet(), 0); } @@ -73,7 +73,7 @@ public void writeInt(int value, int length) { int mask = 1 << length; if (value >= mask) { throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); } for (int i = 0; i < length; i++) { mask >>= 1; @@ -85,7 +85,7 @@ public void writeLong(long value, int length) { long mask = 1L << length; if (value >= mask) { throw new EncodingException( - "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); } for (int i = 0; i < length; i++) { mask >>= 1; @@ -158,7 +158,7 @@ public long readLong(int length) { readIndex = to; return bitSet.readLong(from, to); } - + public boolean readBoolean() { return getValue(readIndex++); } @@ -201,5 +201,4 @@ public FixedIntegerList readFixedIntegerList(int elementLength, int length) { readIndex = newReadIndex; return out; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index 8b88c1a4..3d0c51b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -1,11 +1,12 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.field.FieldKey; +import java.util.function.Predicate; // This class is used to handle collection types. // It is important that we monitor the collections we return for changes. -public abstract class AbstractDirtyableBitStringDataType & FieldKey, T extends Dirtyable> +public abstract class AbstractDirtyableBitStringDataType< + E extends Enum & FieldKey, T extends Dirtyable> extends AbstractEncodableBitStringDataType { protected AbstractDirtyableBitStringDataType(String name, Predicate validator) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 8783843b..1a734630 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -1,25 +1,28 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.function.Predicate; -public abstract class AbstractEncodableBitStringDataType & FieldKey, T> extends DataType { +public abstract class AbstractEncodableBitStringDataType & FieldKey, T> + extends DataType { protected AbstractEncodableBitStringDataType(String name, Predicate validator) { super(name, validator); } @Override - public final void encode(BitString writer, Object[] values, int index, EncodableSegment segment) { + public final void encode( + BitString writer, Object[] values, int index, EncodableSegment segment) { encode(writer, get(values, index), segment); } protected abstract void encode(BitString writer, T value, EncodableSegment segment); @Override - public final void decode(BitString reader, Object[] values, int index, EncodableSegment segment) { + public final void decode( + BitString reader, Object[] values, int index, EncodableSegment segment) { values[index] = decode(reader, segment); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 3dee0b27..92c6e3d0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -1,18 +1,18 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; -import java.util.function.Predicate; -import java.util.stream.Collectors; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; +import java.util.function.Predicate; +import java.util.stream.Collectors; public abstract class DataType & FieldKey, T> { - + protected final String name; private final Predicate validator; - + protected DataType(String name, Predicate validator) { this.name = name; this.validator = validator; @@ -32,8 +32,11 @@ protected final void validate(T v) { return; } else { if (v instanceof Collection) { - throw new ValidationException("Invalid value '" - + ((Collection) v).stream().map(Object::toString).collect(Collectors.joining(",")) + "'"); + throw new ValidationException( + "Invalid value '" + + ((Collection) v) + .stream().map(Object::toString).collect(Collectors.joining(",")) + + "'"); } else { throw new ValidationException("Invalid value '" + v + "'"); } @@ -65,19 +68,18 @@ public final T get(Object[] values, int index) { } return value; } - + public final void set(Object[] values, int index, Object newValue) { T oldValue = get(values, index); T effectiveValue = processValue(oldValue, newValue); validate(effectiveValue); values[index] = effectiveValue; } - + protected abstract T initialize(); @SuppressWarnings("unchecked") protected T processValue(T oldValue, Object newValue) { return (T) newValue; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java index ad15093c..ef4e5495 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/Dirtyable.java @@ -2,5 +2,6 @@ public interface Dirtyable { boolean isDirty(); + void setDirty(boolean dirty); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 2b7b53ea..81bccc51 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,17 +1,19 @@ package com.iab.gpp.encoder.datatype; -import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.List; -public final class EncodableArrayOfFixedIntegerRanges & FieldKey> extends AbstractDirtyableBitStringDataType> { +public final class EncodableArrayOfFixedIntegerRanges & FieldKey> + extends AbstractDirtyableBitStringDataType> { private final int keyBitStringLength; private final int typeBitStringLength; - public EncodableArrayOfFixedIntegerRanges(String name, int keyBitStringLength, int typeBitStringLength) { + public EncodableArrayOfFixedIntegerRanges( + String name, int keyBitStringLength, int typeBitStringLength) { super(name, null); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; @@ -28,7 +30,8 @@ protected DirtyableList initialize() { } @Override - protected void encode(BitString sb, DirtyableList entries, EncodableSegment segment) { + protected void encode( + BitString sb, DirtyableList entries, EncodableSegment segment) { sb.writeInt(entries.size(), 12); for (RangeEntry entry : entries) { sb.writeInt(entry.getKey(), keyBitStringLength); @@ -53,7 +56,8 @@ protected DirtyableList decode(BitString reader, EncodableSegment @SuppressWarnings("unchecked") @Override - protected DirtyableList processValue(DirtyableList oldValue, Object newValue) { + protected DirtyableList processValue( + DirtyableList oldValue, Object newValue) { oldValue.clear(); oldValue.addAll((List) newValue); return oldValue; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 0a21bc52..0969538a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -4,7 +4,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableBoolean & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableBoolean & FieldKey> + extends AbstractEncodableBitStringDataType { private final Boolean initial; @@ -19,7 +20,7 @@ protected Boolean initialize() { } @Override - protected void encode(BitString builder, Boolean value, EncodableSegment segment){ + protected void encode(BitString builder, Boolean value, EncodableSegment segment) { builder.writeBoolean(value); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 837598d7..f9333f57 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.time.Instant; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.time.Instant; -public final class EncodableDatetime & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableDatetime & FieldKey> + extends AbstractEncodableBitStringDataType { public EncodableDatetime(String name) { super(name, null); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 45972234..3ada0870 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -4,7 +4,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFibonacciInteger & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableFibonacciInteger & FieldKey> + extends AbstractEncodableBitStringDataType { private final Integer initial; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index b0adc05f..c1d0ba79 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; -public final class EncodableFibonacciIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFibonacciIntegerRange & FieldKey> + extends AbstractDirtyableBitStringDataType { public EncodableFibonacciIntegerRange(String name) { super(name, null); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index e123bb19..ffb2dda9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; -public final class EncodableFixedBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedBitfield & FieldKey> + extends AbstractDirtyableBitStringDataType { private final int numElements; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index ba726136..6d6fc90d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,25 +1,27 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.function.Predicate; -public final class EncodableFixedInteger & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableFixedInteger & FieldKey> + extends AbstractEncodableBitStringDataType { private final int bitStringLength; private final Integer initial; - - public EncodableFixedInteger(String name, int bitStringLength, Integer initial, Predicate validator) { + + public EncodableFixedInteger( + String name, int bitStringLength, Integer initial, Predicate validator) { super(name, validator); this.bitStringLength = bitStringLength; this.initial = initial; } - + public EncodableFixedInteger(String name, int bitStringLength, Integer initial) { this(name, bitStringLength, initial, null); } - + @Override public String toString() { return name + "=Int(" + bitStringLength + ")"; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index cfad7f65..57d05985 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,18 +1,23 @@ package com.iab.gpp.encoder.datatype; -import java.util.List; -import java.util.function.Predicate; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.List; +import java.util.function.Predicate; -public final class EncodableFixedIntegerList & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedIntegerList & FieldKey> + extends AbstractDirtyableBitStringDataType { private final int elementBitStringLength; private final int numElements; - public EncodableFixedIntegerList(String name, int elementBitStringLength, int numElements, Predicate validator) { + public EncodableFixedIntegerList( + String name, + int elementBitStringLength, + int numElements, + Predicate validator) { super(name, validator); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index b3d3293d..ec844895 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; -public final class EncodableFixedIntegerRange & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFixedIntegerRange & FieldKey> + extends AbstractDirtyableBitStringDataType { public EncodableFixedIntegerRange(String name) { super(name, null); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index ddf6b3f5..82b4b56c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -5,7 +5,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public final class EncodableFixedString & FieldKey> extends AbstractEncodableBitStringDataType { +public final class EncodableFixedString & FieldKey> + extends AbstractEncodableBitStringDataType { private final int stringLength; private final String initial; @@ -15,7 +16,7 @@ public EncodableFixedString(String name, int stringLength, String initial) { this.stringLength = stringLength; this.initial = initial; } - + @Override public String toString() { return name + "=String(" + stringLength + ")"; @@ -25,7 +26,7 @@ public String toString() { protected String initialize() { return initial; } - + @Override protected void encode(BitString builder, String value, EncodableSegment segment) { FixedStringEncoder.encode(builder, value, this.stringLength); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 7d46c137..88b7118b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -1,13 +1,14 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.segment.SegmentValueProvider; import com.iab.gpp.encoder.segment.EncodableSegment; +import com.iab.gpp.encoder.segment.SegmentValueProvider; +import java.util.Collection; -public final class EncodableFlexibleBitfield & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableFlexibleBitfield & FieldKey> + extends AbstractDirtyableBitStringDataType { private final SegmentValueProvider getLengthSupplier; @@ -31,7 +32,6 @@ protected IntegerSet decode(BitString reader, EncodableSegment segment) { return reader.readIntegerSet(getLengthSupplier.extract(segment)); } - @SuppressWarnings("unchecked") @Override protected IntegerSet processValue(IntegerSet oldValue, Object newValue) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 5ff248fa..90a3ed92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -1,13 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.Collection; - -public final class EncodableOptimizedFixedRange & FieldKey> extends AbstractDirtyableBitStringDataType { +public final class EncodableOptimizedFixedRange & FieldKey> + extends AbstractDirtyableBitStringDataType { public EncodableOptimizedFixedRange(String name) { super(name, null); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index a6abb932..36486cb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -1,11 +1,11 @@ package com.iab.gpp.encoder.datatype; -import java.util.AbstractList; import com.iab.gpp.encoder.bitstring.BitSet; +import java.util.AbstractList; /** - * An optimized implementation of {@literal List} of fixed size. - * Use {@link #getInt(int)} and {@link #setInt(int, int)} for efficient access. + * An optimized implementation of {@literal List} of fixed size. Use {@link #getInt(int)} + * and {@link #setInt(int, int)} for efficient access. */ public final class FixedIntegerList extends AbstractList implements Dirtyable { @@ -21,7 +21,7 @@ public FixedIntegerList(BitSet bitSet, int offset, int elementBitStringLength, i this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; } - + public FixedIntegerList(int elementBitStringLength, int numElements) { this(new BitSet(elementBitStringLength * numElements), 0, elementBitStringLength, numElements); } @@ -61,7 +61,11 @@ public int setInt(int index, int value) { int mask = 1 << length; if (value < 0 || value >= mask) { throw new IllegalArgumentException( - "Numeric value '" + value + "' is too large for a bit string length of '" + elementBitStringLength + "'"); + "Numeric value '" + + value + + "' is too large for a bit string length of '" + + elementBitStringLength + + "'"); } int from = offset + index * length; int to = from + length; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java index fb7027ca..79b9aa8b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerCache.java @@ -4,7 +4,9 @@ final class IntegerCache { private IntegerCache() {} + private static final Integer[] CACHE = new Integer[MAX_COLLECTION_SIZE]; + static { for (int i = 0; i < MAX_COLLECTION_SIZE; i++) { CACHE[i] = i; @@ -12,10 +14,9 @@ private IntegerCache() {} } static Integer valueOf(int i) { - if (i >=0 && i < MAX_COLLECTION_SIZE) { + if (i >= 0 && i < MAX_COLLECTION_SIZE) { return CACHE[i]; } return i; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java index d18667cf..32341097 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java @@ -1,19 +1,20 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.bitstring.BitSet; import java.util.AbstractSet; import java.util.Collection; import java.util.NoSuchElementException; +import java.util.PrimitiveIterator.OfInt; import java.util.Spliterator; import java.util.Spliterators; -import java.util.PrimitiveIterator.OfInt; import java.util.logging.Logger; import java.util.stream.IntStream; import java.util.stream.StreamSupport; -import com.iab.gpp.encoder.bitstring.BitSet; /** - * An optimized implementation of {@literal Set} backed by a {@link java.util.BitSet}. - * Use {@link #containsInt(int)}, {@link #addInt(int)}, and {@link #removeInt(int)} for efficient access. + * An optimized implementation of {@literal Set} backed by a {@link java.util.BitSet}. Use + * {@link #containsInt(int)}, {@link #addInt(int)}, and {@link #removeInt(int)} for efficient + * access. */ public final class IntegerSet extends AbstractSet implements Dirtyable { private static final Logger LOGGER = Logger.getLogger(IntegerSet.class.getName()); @@ -53,7 +54,7 @@ public int size() { } private int getOffset(int value) { - int offset = from - adjustment + value; + int offset = from - adjustment + value; if (offset < from) { throw new IndexOutOfBoundsException("Negative index provided"); } @@ -104,7 +105,7 @@ public int nextInt() { } @Override - public Spliterator.OfInt spliterator(){ + public Spliterator.OfInt spliterator() { return Spliterators.spliteratorUnknownSize( iterator(), Spliterator.ORDERED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL); @@ -115,7 +116,7 @@ public IntStream intStream() { } private static final void logOutOfRange(int value) { - LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: "+ value); + LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: " + value); } public void addRange(int start, int end) { @@ -215,4 +216,4 @@ public boolean isDirty() { public void setDirty(boolean dirty) { this.dirty = dirty; } -} \ No newline at end of file +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 5f0aa0b0..c30f40f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -62,5 +62,4 @@ public void setDirty(boolean dirty) { this.dirty = dirty; ids.setDirty(dirty); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index d506ba2f..62d3af2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -4,7 +4,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public final class UnencodableBoolean & FieldKey> extends AbstractEncodableBitStringDataType { +public final class UnencodableBoolean & FieldKey> + extends AbstractEncodableBitStringDataType { private final Boolean initial; @@ -12,7 +13,7 @@ public UnencodableBoolean(String name, Boolean initial) { super(name, null); this.initial = initial; } - + @Override protected Boolean initialize() { return initial; @@ -27,5 +28,4 @@ protected void encode(BitString writer, Boolean value, EncodableSegment segme protected Boolean decode(BitString reader, EncodableSegment segment) { return Boolean.FALSE; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 13dbb8ca..d0379fc6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype; -import java.util.function.Predicate; import com.iab.gpp.encoder.field.FieldKey; +import java.util.function.Predicate; -public final class UnencodableCharacter & FieldKey> extends DataType { +public final class UnencodableCharacter & FieldKey> + extends DataType { private final Character initial; - + public UnencodableCharacter(String name, Character initial, Predicate validator) { super(name, validator); this.initial = initial; @@ -16,5 +17,4 @@ public UnencodableCharacter(String name, Character initial, Predicate protected Character initialize() { return initial; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index efb65924..ac863667 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -5,7 +5,7 @@ public final class UnencodableInteger & FieldKey> extends DataType { private final Integer initial; - + public UnencodableInteger(String name, Integer initial) { super(name, null); this.initial = initial; @@ -15,5 +15,4 @@ public UnencodableInteger(String name, Integer initial) { protected Integer initialize() { return initial; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index b8a741b8..243aebbe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.time.Instant; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; +import java.time.Instant; public class DatetimeEncoder { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index d83c35f9..f333c1c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -7,6 +7,7 @@ private FibonacciIntegerEncoder() {} // which does not overflow a 32-bit integer public static final int FIBONACCI_LIMIT = 42; public static final int[] FIBONACCI_NUMBERS = new int[FIBONACCI_LIMIT]; + static { for (int i = 0; i < FIBONACCI_LIMIT; i++) { if (i == 0) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 02d993a9..d1888cae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -1,9 +1,9 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; +import java.util.Collection; public class FibonacciIntegerRangeEncoder { private FibonacciIntegerRangeEncoder() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index cfdc431c..bb886ed6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -1,13 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.EncodingException; +import java.util.List; public class FixedIntegerListEncoder { private FixedIntegerListEncoder() {} - public static void encode(BitString builder, List value, int elementBitStringLength, int numElements) { + public static void encode( + BitString builder, List value, int elementBitStringLength, int numElements) { int length = value.size(); if (length > numElements) { throw new EncodingException("Too many values '" + value.size() + "'"); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 11ea840e..85432eca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -1,9 +1,9 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; +import java.util.Collection; public class FixedIntegerRangeEncoder { private FixedIntegerRangeEncoder() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 39fd4001..ea2d970c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -5,6 +5,7 @@ public class FixedStringEncoder { private FixedStringEncoder() {} + private static final char SPACE = ' '; public static void encode(BitString builder, String value, int stringLength) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index a56603f6..291be775 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -1,22 +1,23 @@ package com.iab.gpp.encoder.field; -import java.util.function.Predicate; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.FixedIntegerList; +import java.util.function.Predicate; public interface FieldKey { DataType getType(); public static final Predicate VALIDATOR_012 = (n -> n >= 0 && n <= 2); public static final Predicate VALIDATOR_12 = (n -> n >= 1 && n <= 2); - public static final Predicate VALIDATOR_LIST_012 = (l -> { - int size = l.size(); - for (int i = 0; i < size; i++) { - int n = l.getInt(i); - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); + public static final Predicate VALIDATOR_LIST_012 = + (l -> { + int size = l.size(); + for (int i = 0; i < size; i++) { + int n = l.getInt(i); + if (n < 0 || n > 2) { + return false; + } + } + return true; + }); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index bf44d148..249c411d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,14 +1,14 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.datatype.DataType; import java.util.Arrays; import java.util.LinkedHashMap; -import com.iab.gpp.encoder.datatype.DataType; public final class FieldNames & FieldKey> { private final LinkedHashMap map; private final Integer[] indices; - private final DataType[] types; + private final DataType[] types; @SafeVarargs FieldNames(E... keys) { @@ -22,7 +22,7 @@ public final class FieldNames & FieldKey> { this.types[i] = key.getType(); } } - + public int size() { return types.length; } @@ -31,7 +31,7 @@ public int size() { public DataType get(int i) { return (DataType) types[i]; } - + public Integer getIndex(E key) { if (key == null) { return null; @@ -47,5 +47,4 @@ public E resolveKey(FieldKey key) { public String toString() { return Arrays.toString(types); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 957263c5..65ecd219 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -21,13 +21,9 @@ public enum HeaderV1Field implements FieldKey { return type; } - //@formatter:off - public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - HeaderV1Field.ID, - HeaderV1Field.VERSION, - HeaderV1Field.SECTION_IDS - ); - //@formatter:on - + // @formatter:off + public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>(HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 7df97035..8773a0bd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -33,8 +33,12 @@ public enum TcfCaV1Field implements FieldKey { PUB_PURPOSES_EXPRESS_CONSENT(new EncodableFixedBitfield<>("PubPurposesExpressConsent", 24)), PUB_PURPOSES_IMPLIED_CONSENT(new EncodableFixedBitfield<>("PubPurposesImpliedConsent", 24)), NUM_CUSTOM_PURPOSES(new EncodableFixedInteger<>("NumCustomPurposes", 6, 0)), - CUSTOM_PURPOSES_EXPRESS_CONSENT(new EncodableFlexibleBitfield<>("CustomPurposesExpressConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), - CUSTOM_PURPOSES_IMPLIED_CONSENT(new EncodableFlexibleBitfield<>("CustomPurposesImpliedConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + CUSTOM_PURPOSES_EXPRESS_CONSENT( + new EncodableFlexibleBitfield<>( + "CustomPurposesExpressConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), + CUSTOM_PURPOSES_IMPLIED_CONSENT( + new EncodableFlexibleBitfield<>( + "CustomPurposesImpliedConsent", TcfCaV1Field.NUM_CUSTOM_PURPOSES)), DISCLOSED_VENDORS_SEGMENT_TYPE(new EncodableFixedInteger<>("DisclosedVendorsSegmentType", 3, 1)), DISCLOSED_VENDORS(new EncodableOptimizedFixedRange<>("DisclosedVendors")); @@ -49,42 +53,41 @@ public enum TcfCaV1Field implements FieldKey { public DataType getType() { return type; } - //@formatter:off - public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfCaV1Field.VERSION, - TcfCaV1Field.CREATED, - TcfCaV1Field.LAST_UPDATED, - TcfCaV1Field.CMP_ID, - TcfCaV1Field.CMP_VERSION, - TcfCaV1Field.CONSENT_SCREEN, - TcfCaV1Field.CONSENT_LANGUAGE, - TcfCaV1Field.VENDOR_LIST_VERSION, - TcfCaV1Field.TCF_POLICY_VERSION, - TcfCaV1Field.USE_NON_STANDARD_STACKS, - TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, - TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, - TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, - TcfCaV1Field.VENDOR_EXPRESS_CONSENT, - TcfCaV1Field.VENDOR_IMPLIED_CONSENT, - TcfCaV1Field.PUB_RESTRICTIONS - ); - //@formatter:on - //@formatter:off - public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, - TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, - TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, - TcfCaV1Field.NUM_CUSTOM_PURPOSES, - TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + TcfCaV1Field.VERSION, + TcfCaV1Field.CREATED, + TcfCaV1Field.LAST_UPDATED, + TcfCaV1Field.CMP_ID, + TcfCaV1Field.CMP_VERSION, + TcfCaV1Field.CONSENT_SCREEN, + TcfCaV1Field.CONSENT_LANGUAGE, + TcfCaV1Field.VENDOR_LIST_VERSION, + TcfCaV1Field.TCF_POLICY_VERSION, + TcfCaV1Field.USE_NON_STANDARD_STACKS, + TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, + TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, + TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, + TcfCaV1Field.VENDOR_EXPRESS_CONSENT, + TcfCaV1Field.VENDOR_IMPLIED_CONSENT, + TcfCaV1Field.PUB_RESTRICTIONS); + // @formatter:on - //@formatter:off - public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, - TcfCaV1Field.DISCLOSED_VENDORS - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = + new FieldNames<>( + TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, + TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, + TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, + TcfCaV1Field.NUM_CUSTOM_PURPOSES, + TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, + TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT); + // @formatter:on + + // @formatter:off + public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = + new FieldNames<>(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, TcfCaV1Field.DISCLOSED_VENDORS); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 8a1ebddf..1218117f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -31,12 +31,16 @@ public enum TcfEuV2Field implements FieldKey { VENDOR_CONSENTS(new EncodableOptimizedFixedRange<>("VendorConsents")), VENDOR_LEGITIMATE_INTERESTS(new EncodableOptimizedFixedRange<>("VendorLegitimateInterests")), PUBLISHER_RESTRICTIONS(new EncodableArrayOfFixedIntegerRanges<>("PublisherRestrictions", 6, 2)), - PUBLISHER_PURPOSES_SEGMENT_TYPE(new EncodableFixedInteger<>("PublisherPurposesSegmentType", 3, 3)), + PUBLISHER_PURPOSES_SEGMENT_TYPE( + new EncodableFixedInteger<>("PublisherPurposesSegmentType", 3, 3)), PUBLISHER_CONSENTS(new EncodableFixedBitfield<>("PublisherConsents", 24)), PUBLISHER_LEGITIMATE_INTERESTS(new EncodableFixedBitfield<>("PublisherLegitimateInterests", 24)), NUM_CUSTOM_PURPOSES(new EncodableFixedInteger<>("NumCustomPurposes", 6, 0)), - PUBLISHER_CUSTOM_CONSENTS(new EncodableFlexibleBitfield<>("PublisherCustomConsents", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), - PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS(new EncodableFlexibleBitfield<>("PublisherCustomLegitimateInterests", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + PUBLISHER_CUSTOM_CONSENTS( + new EncodableFlexibleBitfield<>("PublisherCustomConsents", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS( + new EncodableFlexibleBitfield<>( + "PublisherCustomLegitimateInterests", TcfEuV2Field.NUM_CUSTOM_PURPOSES)), VENDORS_ALLOWED_SEGMENT_TYPE(new EncodableFixedInteger<>("VendorsAllowedSegmentType", 3, 2)), VENDORS_ALLOWED(new EncodableOptimizedFixedRange<>("VendorsAllowed")), VENDORS_DISCLOSED_SEGMENT_TYPE(new EncodableFixedInteger<>("VendorsDisclosedSegmentType", 3, 1)), @@ -53,52 +57,48 @@ public enum TcfEuV2Field implements FieldKey { return type; } - //@formatter:off - public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfEuV2Field.VERSION, - TcfEuV2Field.CREATED, - TcfEuV2Field.LAST_UPDATED, - TcfEuV2Field.CMP_ID, - TcfEuV2Field.CMP_VERSION, - TcfEuV2Field.CONSENT_SCREEN, - TcfEuV2Field.CONSENT_LANGUAGE, - TcfEuV2Field.VENDOR_LIST_VERSION, - TcfEuV2Field.POLICY_VERSION, - TcfEuV2Field.IS_SERVICE_SPECIFIC, - TcfEuV2Field.USE_NON_STANDARD_STACKS, - TcfEuV2Field.SPECIAL_FEATURE_OPTINS, - TcfEuV2Field.PURPOSE_CONSENTS, - TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS, - TcfEuV2Field.PURPOSE_ONE_TREATMENT, - TcfEuV2Field.PUBLISHER_COUNTRY_CODE, - TcfEuV2Field.VENDOR_CONSENTS, - TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, - TcfEuV2Field.PUBLISHER_RESTRICTIONS - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + TcfEuV2Field.VERSION, + TcfEuV2Field.CREATED, + TcfEuV2Field.LAST_UPDATED, + TcfEuV2Field.CMP_ID, + TcfEuV2Field.CMP_VERSION, + TcfEuV2Field.CONSENT_SCREEN, + TcfEuV2Field.CONSENT_LANGUAGE, + TcfEuV2Field.VENDOR_LIST_VERSION, + TcfEuV2Field.POLICY_VERSION, + TcfEuV2Field.IS_SERVICE_SPECIFIC, + TcfEuV2Field.USE_NON_STANDARD_STACKS, + TcfEuV2Field.SPECIAL_FEATURE_OPTINS, + TcfEuV2Field.PURPOSE_CONSENTS, + TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS, + TcfEuV2Field.PURPOSE_ONE_TREATMENT, + TcfEuV2Field.PUBLISHER_COUNTRY_CODE, + TcfEuV2Field.VENDOR_CONSENTS, + TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, + TcfEuV2Field.PUBLISHER_RESTRICTIONS); + // @formatter:on - //@formatter:off - public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, - TcfEuV2Field.PUBLISHER_CONSENTS, - TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, - TcfEuV2Field.NUM_CUSTOM_PURPOSES, - TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS, - TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = + new FieldNames<>( + TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, + TcfEuV2Field.PUBLISHER_CONSENTS, + TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, + TcfEuV2Field.NUM_CUSTOM_PURPOSES, + TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS, + TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS); + // @formatter:on - //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, - TcfEuV2Field.VENDORS_ALLOWED - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = + new FieldNames<>(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED); + // @formatter:on - //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = new FieldNames<>( - TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, - TcfEuV2Field.VENDORS_DISCLOSED - ); - //@formatter:on + // @formatter:off + public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = + new FieldNames<>(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_DISCLOSED); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 3df1a52e..af7f1e41 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -9,27 +9,23 @@ public enum UsCaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCa.VERSION)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), - SHARING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_LIMIT_USE_NOTICE( new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), - SHARING_OPT_OUT( - new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SHARING_OPT_OUT(new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 9, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, VALIDATOR_LIST_012)), - PERSONAL_DATA_CONSENTS( - new EncodableFixedInteger<>("PersonalDataConsents",2, 0, VALIDATOR_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 2, VALIDATOR_LIST_012)), + PERSONAL_DATA_CONSENTS(new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( - new EncodableFixedInteger<>("MspaCoveredTransaction",2, 1, VALIDATOR_12)), + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( - new EncodableFixedInteger<>("MspaOptOutOptionMode",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), @@ -46,28 +42,25 @@ public enum UsCaField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCaField.VERSION, - UsCaField.SALE_OPT_OUT_NOTICE, - UsCaField.SHARING_OPT_OUT_NOTICE, - UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, - UsCaField.SALE_OPT_OUT, - UsCaField.SHARING_OPT_OUT, - UsCaField.SENSITIVE_DATA_PROCESSING, - UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsCaField.PERSONAL_DATA_CONSENTS, - UsCaField.MSPA_COVERED_TRANSACTION, - UsCaField.MSPA_OPT_OUT_OPTION_MODE, - UsCaField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsCaField.VERSION, + UsCaField.SALE_OPT_OUT_NOTICE, + UsCaField.SHARING_OPT_OUT_NOTICE, + UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, + UsCaField.SALE_OPT_OUT, + UsCaField.SHARING_OPT_OUT, + UsCaField.SENSITIVE_DATA_PROCESSING, + UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsCaField.PERSONAL_DATA_CONSENTS, + UsCaField.MSPA_COVERED_TRANSACTION, + UsCaField.MSPA_OPT_OUT_OPTION_MODE, + UsCaField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCaField.GPC_SEGMENT_TYPE, - UsCaField.GPC_SEGMENT_INCLUDED, - UsCaField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsCaField.GPC_SEGMENT_TYPE, UsCaField.GPC_SEGMENT_INCLUDED, UsCaField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index eb27198d..bb796d6f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -9,17 +9,15 @@ public enum UsCoField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCo.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), - SENSITIVE_DATA_PROCESSING(new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, VALIDATOR_LIST_012)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 7, VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -44,27 +42,24 @@ public enum UsCoField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCoField.VERSION, - UsCoField.SHARING_NOTICE, - UsCoField.SALE_OPT_OUT_NOTICE, - UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsCoField.SALE_OPT_OUT, - UsCoField.TARGETED_ADVERTISING_OPT_OUT, - UsCoField.SENSITIVE_DATA_PROCESSING, - UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsCoField.MSPA_COVERED_TRANSACTION, - UsCoField.MSPA_OPT_OUT_OPTION_MODE, - UsCoField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsCoField.VERSION, + UsCoField.SHARING_NOTICE, + UsCoField.SALE_OPT_OUT_NOTICE, + UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsCoField.SALE_OPT_OUT, + UsCoField.TARGETED_ADVERTISING_OPT_OUT, + UsCoField.SENSITIVE_DATA_PROCESSING, + UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsCoField.MSPA_COVERED_TRANSACTION, + UsCoField.MSPA_OPT_OUT_OPTION_MODE, + UsCoField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCoField.GPC_SEGMENT_TYPE, - UsCoField.GPC_SEGMENT_INCLUDED, - UsCoField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsCoField.GPC_SEGMENT_TYPE, UsCoField.GPC_SEGMENT_INCLUDED, UsCoField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index bd06a729..58fbdbae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -9,19 +9,17 @@ public enum UsCtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsCt.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), MSPA_COVERED_TRANSACTION( new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( @@ -44,27 +42,24 @@ public enum UsCtField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCtField.VERSION, - UsCtField.SHARING_NOTICE, - UsCtField.SALE_OPT_OUT_NOTICE, - UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsCtField.SALE_OPT_OUT, - UsCtField.TARGETED_ADVERTISING_OPT_OUT, - UsCtField.SENSITIVE_DATA_PROCESSING, - UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsCtField.MSPA_COVERED_TRANSACTION, - UsCtField.MSPA_OPT_OUT_OPTION_MODE, - UsCtField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsCtField.VERSION, + UsCtField.SHARING_NOTICE, + UsCtField.SALE_OPT_OUT_NOTICE, + UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsCtField.SALE_OPT_OUT, + UsCtField.TARGETED_ADVERTISING_OPT_OUT, + UsCtField.SENSITIVE_DATA_PROCESSING, + UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsCtField.MSPA_COVERED_TRANSACTION, + UsCtField.MSPA_OPT_OUT_OPTION_MODE, + UsCtField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsCtField.GPC_SEGMENT_TYPE, - UsCtField.GPC_SEGMENT_INCLUDED, - UsCtField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsCtField.GPC_SEGMENT_TYPE, UsCtField.GPC_SEGMENT_INCLUDED, UsCtField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index eafe0c14..c6ed86c7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -9,14 +9,11 @@ public enum UsDeField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsDe.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsDeField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsDeField.VERSION, - UsDeField.PROCESSING_NOTICE, - UsDeField.SALE_OPT_OUT_NOTICE, - UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsDeField.SALE_OPT_OUT, - UsDeField.TARGETED_ADVERTISING_OPT_OUT, - UsDeField.SENSITIVE_DATA_PROCESSING, - UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsDeField.MSPA_COVERED_TRANSACTION, - UsDeField.MSPA_OPT_OUT_OPTION_MODE, - UsDeField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsDeField.VERSION, + UsDeField.PROCESSING_NOTICE, + UsDeField.SALE_OPT_OUT_NOTICE, + UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsDeField.SALE_OPT_OUT, + UsDeField.TARGETED_ADVERTISING_OPT_OUT, + UsDeField.SENSITIVE_DATA_PROCESSING, + UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsDeField.MSPA_COVERED_TRANSACTION, + UsDeField.MSPA_OPT_OUT_OPTION_MODE, + UsDeField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsDeField.GPC_SEGMENT_TYPE, - UsDeField.GPC_SEGMENT_INCLUDED, - UsDeField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsDeField.GPC_SEGMENT_TYPE, UsDeField.GPC_SEGMENT_INCLUDED, UsDeField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index ec76b719..3f45ecae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -7,19 +7,17 @@ public enum UsFlField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsFl.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -40,20 +38,20 @@ public enum UsFlField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsFlField.VERSION, - UsFlField.PROCESSING_NOTICE, - UsFlField.SALE_OPT_OUT_NOTICE, - UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsFlField.SALE_OPT_OUT, - UsFlField.TARGETED_ADVERTISING_OPT_OUT, - UsFlField.SENSITIVE_DATA_PROCESSING, - UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsFlField.MSPA_COVERED_TRANSACTION, - UsFlField.MSPA_OPT_OUT_OPTION_MODE, - UsFlField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsFlField.VERSION, + UsFlField.PROCESSING_NOTICE, + UsFlField.SALE_OPT_OUT_NOTICE, + UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsFlField.SALE_OPT_OUT, + UsFlField.TARGETED_ADVERTISING_OPT_OUT, + UsFlField.SENSITIVE_DATA_PROCESSING, + UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsFlField.MSPA_COVERED_TRANSACTION, + UsFlField.MSPA_OPT_OUT_OPTION_MODE, + UsFlField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index cd6ebb8e..b0d655cc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -9,16 +9,13 @@ public enum UsIaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsIa.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_OPT_OUT_NOTICE( new EncodableFixedInteger<>("SensitiveDataOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsIaField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsIaField.VERSION, - UsIaField.PROCESSING_NOTICE, - UsIaField.SALE_OPT_OUT_NOTICE, - UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, - UsIaField.SALE_OPT_OUT, - UsIaField.TARGETED_ADVERTISING_OPT_OUT, - UsIaField.SENSITIVE_DATA_PROCESSING, - UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsIaField.MSPA_COVERED_TRANSACTION, - UsIaField.MSPA_OPT_OUT_OPTION_MODE, - UsIaField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsIaField.VERSION, + UsIaField.PROCESSING_NOTICE, + UsIaField.SALE_OPT_OUT_NOTICE, + UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, + UsIaField.SALE_OPT_OUT, + UsIaField.TARGETED_ADVERTISING_OPT_OUT, + UsIaField.SENSITIVE_DATA_PROCESSING, + UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsIaField.MSPA_COVERED_TRANSACTION, + UsIaField.MSPA_OPT_OUT_OPTION_MODE, + UsIaField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsIaField.GPC_SEGMENT_TYPE, - UsIaField.GPC_SEGMENT_INCLUDED, - UsIaField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsIaField.GPC_SEGMENT_TYPE, UsIaField.GPC_SEGMENT_INCLUDED, UsIaField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index e35c7dc4..6fda2f30 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -9,19 +9,17 @@ public enum UsMtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsMt.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -29,7 +27,7 @@ public enum UsMtField implements FieldKey { MSPA_OPT_OUT_OPTION_MODE( new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), MSPA_SERVICE_PROVIDER_MODE( - new EncodableFixedInteger<>("MspaServiceProviderMode",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), @@ -46,28 +44,25 @@ public enum UsMtField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsMtField.VERSION, - UsMtField.SHARING_NOTICE, - UsMtField.SALE_OPT_OUT_NOTICE, - UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsMtField.SALE_OPT_OUT, - UsMtField.TARGETED_ADVERTISING_OPT_OUT, - UsMtField.SENSITIVE_DATA_PROCESSING, - UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsMtField.MSPA_COVERED_TRANSACTION, - UsMtField.MSPA_OPT_OUT_OPTION_MODE, - UsMtField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsMtField.VERSION, + UsMtField.SHARING_NOTICE, + UsMtField.SALE_OPT_OUT_NOTICE, + UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsMtField.SALE_OPT_OUT, + UsMtField.TARGETED_ADVERTISING_OPT_OUT, + UsMtField.SENSITIVE_DATA_PROCESSING, + UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsMtField.MSPA_COVERED_TRANSACTION, + UsMtField.MSPA_OPT_OUT_OPTION_MODE, + UsMtField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsMtField.GPC_SEGMENT_TYPE, - UsMtField.GPC_SEGMENT_INCLUDED, - UsMtField.GPC - ); - //@formatter:on + // @formatter:off + public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsMtField.GPC_SEGMENT_TYPE, UsMtField.GPC_SEGMENT_INCLUDED, UsMtField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 56af13a5..3c6fd6d2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -9,29 +9,24 @@ public enum UsNatField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNat.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), - SHARING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SharingOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_LIMIT_USE_NOTICE( new EncodableFixedInteger<>("SensitiveDataLimitUseNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), - SHARING_OPT_OUT( - new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SHARING_OPT_OUT(new EncodableFixedInteger<>("SharingOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), - PERSONAL_DATA_CONSENTS( - new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + PERSONAL_DATA_CONSENTS(new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), MSPA_OPT_OUT_OPTION_MODE( @@ -54,32 +49,30 @@ public enum UsNatField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNatField.VERSION, - UsNatField.SHARING_NOTICE, - UsNatField.SALE_OPT_OUT_NOTICE, - UsNatField.SHARING_OPT_OUT_NOTICE, - UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, - UsNatField.SALE_OPT_OUT, - UsNatField.SHARING_OPT_OUT, - UsNatField.TARGETED_ADVERTISING_OPT_OUT, - UsNatField.SENSITIVE_DATA_PROCESSING, - UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsNatField.PERSONAL_DATA_CONSENTS, - UsNatField.MSPA_COVERED_TRANSACTION, - UsNatField.MSPA_OPT_OUT_OPTION_MODE, - UsNatField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNatField.VERSION, + UsNatField.SHARING_NOTICE, + UsNatField.SALE_OPT_OUT_NOTICE, + UsNatField.SHARING_OPT_OUT_NOTICE, + UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, + UsNatField.SALE_OPT_OUT, + UsNatField.SHARING_OPT_OUT, + UsNatField.TARGETED_ADVERTISING_OPT_OUT, + UsNatField.SENSITIVE_DATA_PROCESSING, + UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsNatField.PERSONAL_DATA_CONSENTS, + UsNatField.MSPA_COVERED_TRANSACTION, + UsNatField.MSPA_OPT_OUT_OPTION_MODE, + UsNatField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNatField.GPC_SEGMENT_TYPE, - UsNatField.GPC_SEGMENT_INCLUDED, - UsNatField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 4783273f..069de8c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -9,14 +9,11 @@ public enum UsNeField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNe.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsNeField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNeField.VERSION, - UsNeField.PROCESSING_NOTICE, - UsNeField.SALE_OPT_OUT_NOTICE, - UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsNeField.SALE_OPT_OUT, - UsNeField.TARGETED_ADVERTISING_OPT_OUT, - UsNeField.SENSITIVE_DATA_PROCESSING, - UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsNeField.MSPA_COVERED_TRANSACTION, - UsNeField.MSPA_OPT_OUT_OPTION_MODE, - UsNeField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNeField.VERSION, + UsNeField.PROCESSING_NOTICE, + UsNeField.SALE_OPT_OUT_NOTICE, + UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsNeField.SALE_OPT_OUT, + UsNeField.TARGETED_ADVERTISING_OPT_OUT, + UsNeField.SENSITIVE_DATA_PROCESSING, + UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsNeField.MSPA_COVERED_TRANSACTION, + UsNeField.MSPA_OPT_OUT_OPTION_MODE, + UsNeField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNeField.GPC_SEGMENT_TYPE, - UsNeField.GPC_SEGMENT_INCLUDED, - UsNeField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsNeField.GPC_SEGMENT_TYPE, UsNeField.GPC_SEGMENT_INCLUDED, UsNeField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index f296551a..d0e41067 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -9,19 +9,17 @@ public enum UsNhField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNh.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -46,28 +44,25 @@ public enum UsNhField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNhField.VERSION, - UsNhField.PROCESSING_NOTICE, - UsNhField.SALE_OPT_OUT_NOTICE, - UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsNhField.SALE_OPT_OUT, - UsNhField.TARGETED_ADVERTISING_OPT_OUT, - UsNhField.SENSITIVE_DATA_PROCESSING, - UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsNhField.MSPA_COVERED_TRANSACTION, - UsNhField.MSPA_OPT_OUT_OPTION_MODE, - UsNhField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNhField.VERSION, + UsNhField.PROCESSING_NOTICE, + UsNhField.SALE_OPT_OUT_NOTICE, + UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsNhField.SALE_OPT_OUT, + UsNhField.TARGETED_ADVERTISING_OPT_OUT, + UsNhField.SENSITIVE_DATA_PROCESSING, + UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsNhField.MSPA_COVERED_TRANSACTION, + UsNhField.MSPA_OPT_OUT_OPTION_MODE, + UsNhField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNhField.GPC_SEGMENT_TYPE, - UsNhField.GPC_SEGMENT_INCLUDED, - UsNhField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsNhField.GPC_SEGMENT_TYPE, UsNhField.GPC_SEGMENT_INCLUDED, UsNhField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 061cb5ae..b1dc6d64 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -9,19 +9,17 @@ public enum UsNjField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNj.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice",2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 10, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 5, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -46,28 +44,25 @@ public enum UsNjField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNjField.VERSION, - UsNjField.PROCESSING_NOTICE, - UsNjField.SALE_OPT_OUT_NOTICE, - UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsNjField.SALE_OPT_OUT, - UsNjField.TARGETED_ADVERTISING_OPT_OUT, - UsNjField.SENSITIVE_DATA_PROCESSING, - UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsNjField.MSPA_COVERED_TRANSACTION, - UsNjField.MSPA_OPT_OUT_OPTION_MODE, - UsNjField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsNjField.VERSION, + UsNjField.PROCESSING_NOTICE, + UsNjField.SALE_OPT_OUT_NOTICE, + UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsNjField.SALE_OPT_OUT, + UsNjField.TARGETED_ADVERTISING_OPT_OUT, + UsNjField.SENSITIVE_DATA_PROCESSING, + UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsNjField.MSPA_COVERED_TRANSACTION, + UsNjField.MSPA_OPT_OUT_OPTION_MODE, + UsNjField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsNjField.GPC_SEGMENT_TYPE, - UsNjField.GPC_SEGMENT_INCLUDED, - UsNjField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsNjField.GPC_SEGMENT_TYPE, UsNjField.GPC_SEGMENT_INCLUDED, UsNjField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index 4061920d..a8a016fb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -9,19 +9,17 @@ public enum UsOrField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsOr.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 11, VALIDATOR_LIST_012)), - KNOWN_CHILD_SENSITIVE_DATA_CONSENTS(new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), ADDITIONAL_DATA_PROCESSING_CONSENT( new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( @@ -46,28 +44,25 @@ public enum UsOrField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsOrField.VERSION, - UsOrField.PROCESSING_NOTICE, - UsOrField.SALE_OPT_OUT_NOTICE, - UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsOrField.SALE_OPT_OUT, - UsOrField.TARGETED_ADVERTISING_OPT_OUT, - UsOrField.SENSITIVE_DATA_PROCESSING, - UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsOrField.MSPA_COVERED_TRANSACTION, - UsOrField.MSPA_OPT_OUT_OPTION_MODE, - UsOrField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsOrField.VERSION, + UsOrField.PROCESSING_NOTICE, + UsOrField.SALE_OPT_OUT_NOTICE, + UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsOrField.SALE_OPT_OUT, + UsOrField.TARGETED_ADVERTISING_OPT_OUT, + UsOrField.SENSITIVE_DATA_PROCESSING, + UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsOrField.MSPA_COVERED_TRANSACTION, + UsOrField.MSPA_OPT_OUT_OPTION_MODE, + UsOrField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsOrField.GPC_SEGMENT_TYPE, - UsOrField.GPC_SEGMENT_INCLUDED, - UsOrField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsOrField.GPC_SEGMENT_TYPE, UsOrField.GPC_SEGMENT_INCLUDED, UsOrField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 83cba306..bc7c29d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -9,14 +9,11 @@ public enum UsTnField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsTn.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice",2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsTnField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsTnField.VERSION, - UsTnField.PROCESSING_NOTICE, - UsTnField.SALE_OPT_OUT_NOTICE, - UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsTnField.SALE_OPT_OUT, - UsTnField.TARGETED_ADVERTISING_OPT_OUT, - UsTnField.SENSITIVE_DATA_PROCESSING, - UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsTnField.MSPA_COVERED_TRANSACTION, - UsTnField.MSPA_OPT_OUT_OPTION_MODE, - UsTnField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsTnField.VERSION, + UsTnField.PROCESSING_NOTICE, + UsTnField.SALE_OPT_OUT_NOTICE, + UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsTnField.SALE_OPT_OUT, + UsTnField.TARGETED_ADVERTISING_OPT_OUT, + UsTnField.SENSITIVE_DATA_PROCESSING, + UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsTnField.MSPA_COVERED_TRANSACTION, + UsTnField.MSPA_OPT_OUT_OPTION_MODE, + UsTnField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsTnField.GPC_SEGMENT_TYPE, - UsTnField.GPC_SEGMENT_INCLUDED, - UsTnField.GPC - ); - //@formatter:on + // @formatter:off + public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsTnField.GPC_SEGMENT_TYPE, UsTnField.GPC_SEGMENT_INCLUDED, UsTnField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 91d5cc17..abcd9b58 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -9,14 +9,11 @@ public enum UsTxField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsTx.VERSION)), - PROCESSING_NOTICE( - new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -47,28 +44,25 @@ public enum UsTxField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsTxField.VERSION, - UsTxField.PROCESSING_NOTICE, - UsTxField.SALE_OPT_OUT_NOTICE, - UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsTxField.SALE_OPT_OUT, - UsTxField.TARGETED_ADVERTISING_OPT_OUT, - UsTxField.SENSITIVE_DATA_PROCESSING, - UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, - UsTxField.MSPA_COVERED_TRANSACTION, - UsTxField.MSPA_OPT_OUT_OPTION_MODE, - UsTxField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsTxField.VERSION, + UsTxField.PROCESSING_NOTICE, + UsTxField.SALE_OPT_OUT_NOTICE, + UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsTxField.SALE_OPT_OUT, + UsTxField.TARGETED_ADVERTISING_OPT_OUT, + UsTxField.SENSITIVE_DATA_PROCESSING, + UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsTxField.MSPA_COVERED_TRANSACTION, + UsTxField.MSPA_OPT_OUT_OPTION_MODE, + UsTxField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on - //@formatter:off - public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsTxField.GPC_SEGMENT_TYPE, - UsTxField.GPC_SEGMENT_INCLUDED, - UsTxField.GPC - ); - //@formatter:on + // @formatter:off + public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsTxField.GPC_SEGMENT_TYPE, UsTxField.GPC_SEGMENT_INCLUDED, UsTxField.GPC); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 0c36f6be..8b583cca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -7,16 +7,13 @@ public enum UsUtField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsUt.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice",2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut",2, 0, VALIDATOR_012)), + new EncodableFixedInteger<>("SensitiveDataProcessingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -41,20 +38,20 @@ public enum UsUtField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsUtField.VERSION, - UsUtField.SHARING_NOTICE, - UsUtField.SALE_OPT_OUT_NOTICE, - UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, - UsUtField.SALE_OPT_OUT, - UsUtField.TARGETED_ADVERTISING_OPT_OUT, - UsUtField.SENSITIVE_DATA_PROCESSING, - UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsUtField.MSPA_COVERED_TRANSACTION, - UsUtField.MSPA_OPT_OUT_OPTION_MODE, - UsUtField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsUtField.VERSION, + UsUtField.SHARING_NOTICE, + UsUtField.SALE_OPT_OUT_NOTICE, + UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + UsUtField.SALE_OPT_OUT, + UsUtField.TARGETED_ADVERTISING_OPT_OUT, + UsUtField.SENSITIVE_DATA_PROCESSING, + UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsUtField.MSPA_COVERED_TRANSACTION, + UsUtField.MSPA_OPT_OUT_OPTION_MODE, + UsUtField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 287eaf55..057ed29f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -7,14 +7,11 @@ public enum UsVaField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsVa.VERSION)), - SHARING_NOTICE( - new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT_NOTICE( - new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + SHARING_NOTICE(new EncodableFixedInteger<>("SharingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT_NOTICE( new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), - SALE_OPT_OUT( - new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( @@ -39,19 +36,19 @@ public enum UsVaField implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UsVaField.VERSION, - UsVaField.SHARING_NOTICE, - UsVaField.SALE_OPT_OUT_NOTICE, - UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - UsVaField.SALE_OPT_OUT, - UsVaField.TARGETED_ADVERTISING_OPT_OUT, - UsVaField.SENSITIVE_DATA_PROCESSING, - UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - UsVaField.MSPA_COVERED_TRANSACTION, - UsVaField.MSPA_OPT_OUT_OPTION_MODE, - UsVaField.MSPA_SERVICE_PROVIDER_MODE - ); - //@formatter:on + // @formatter:off + public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsVaField.VERSION, + UsVaField.SHARING_NOTICE, + UsVaField.SALE_OPT_OUT_NOTICE, + UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsVaField.SALE_OPT_OUT, + UsVaField.TARGETED_ADVERTISING_OPT_OUT, + UsVaField.SENSITIVE_DATA_PROCESSING, + UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsVaField.MSPA_COVERED_TRANSACTION, + UsVaField.MSPA_OPT_OUT_OPTION_MODE, + UsVaField.MSPA_SERVICE_PROVIDER_MODE); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index 42921193..4f584830 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -8,8 +8,10 @@ public enum UspV1Field implements FieldKey { VERSION(new UnencodableInteger<>("Version", UspV1.VERSION)), NOTICE(new UnencodableCharacter<>("Notice", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), - OPT_OUT_SALE(new UnencodableCharacter<>("OptOutSale", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), - LSPA_COVERED(new UnencodableCharacter<>("LspaCovered", '-', (v -> v == 'Y' || v == 'N' || v == '-'))); + OPT_OUT_SALE( + new UnencodableCharacter<>("OptOutSale", '-', (v -> v == 'Y' || v == 'N' || v == '-'))), + LSPA_COVERED( + new UnencodableCharacter<>("LspaCovered", '-', (v -> v == 'Y' || v == 'N' || v == '-'))); private final DataType type; @@ -22,12 +24,9 @@ public enum UspV1Field implements FieldKey { return type; } - //@formatter:off - public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( - UspV1Field.VERSION, - UspV1Field.NOTICE, - UspV1Field.OPT_OUT_SALE, - UspV1Field.LSPA_COVERED - ); - //@formatter:on + // @formatter:off + public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UspV1Field.VERSION, UspV1Field.NOTICE, UspV1Field.OPT_OUT_SALE, UspV1Field.LSPA_COVERED); + // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index cb095ae7..126dca76 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -3,7 +3,7 @@ import com.iab.gpp.encoder.datatype.Dirtyable; public abstract class AbstractEncodable implements Dirtyable { - + private CharSequence encoded; private boolean decoded = true; @@ -43,5 +43,4 @@ public final CharSequence encodeCharSequence() { } return this.encoded; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java index f934b161..2e25a6cd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSection.java @@ -9,5 +9,4 @@ public abstract class AbstractUsSection & FieldKey> extends En protected AbstractUsSection(EncodableSegment... segments) { super(segments); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java index 2c7c0390..2fce4634 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java @@ -1,13 +1,15 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; +import java.util.ArrayList; +import java.util.List; -public abstract class AbstractUsSectionWithGpc & FieldKey> extends AbstractUsSection { +public abstract class AbstractUsSectionWithGpc & FieldKey> + extends AbstractUsSection { - protected AbstractUsSectionWithGpc(EncodableSegment coreSegment, EncodableSegment gpcSegment) { + protected AbstractUsSectionWithGpc( + EncodableSegment coreSegment, EncodableSegment gpcSegment) { super(coreSegment, gpcSegment); } @@ -37,11 +39,11 @@ protected final CharSequence doEncode() { List encodedSegments = new ArrayList<>(size); encodedSegments.add(getSegment(0).encodeCharSequence()); - if(size >= 2 && getGpcSegmentIncluded()) { + if (size >= 2 && getGpcSegmentIncluded()) { encodedSegments.add(getSegment(1).encodeCharSequence()); } - return SlicedCharSequence.join('.', encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } public abstract Integer getGpcSegmentType(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 169bf43e..14b5d3dc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -129,7 +129,7 @@ public final void setFieldValue(E fieldName, Object value) { int numSegments = size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = getSegment(i); - if(segment.hasField(fieldName)) { + if (segment.hasField(fieldName)) { segment.setFieldValue(fieldName, value); onSet(fieldName); return; @@ -166,7 +166,12 @@ public final void setDirty(boolean dirty) { public final String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); - sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); + sb.append("{id=") + .append(getId()) + .append(", name=") + .append(getName()) + .append(", version=") + .append(getVersion()); int numSegments = size(); for (int i = 0; i < numSegments; i++) { sb.append(", ").append(getSegment(i).toString()); @@ -174,5 +179,4 @@ public final String toString() { sb.append('}'); return sb.toString(); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java index 85c7e5f7..33d62b76 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -66,7 +66,6 @@ public static final CharSequence join(char glue, List pieces) { return EMPTY; } - @Override public int length() { return end - start; @@ -86,5 +85,4 @@ public CharSequence subSequence(int newStart, int newEnd) { public String toString() { return base.substring(start, end); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 0b47b597..fc14c315 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -1,13 +1,13 @@ package com.iab.gpp.encoder.section; -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.segment.Base64Segment; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; public class TcfCaV1 extends EncodableSection { @@ -16,7 +16,10 @@ public class TcfCaV1 extends EncodableSection { public static final String NAME = "tcfcav1"; public TcfCaV1() { - super(new Base64Segment<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), new Base64Segment<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), + new Base64Segment<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES)); } public TcfCaV1(CharSequence encodedString) { @@ -46,25 +49,25 @@ protected void doDecode(CharSequence encodedString) { for (int i = 0; i < numEncodedSegments; i++) { /** - * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. + * The first 3 bits contain the segment id. Rather than decode the entire string, just check + * the first character. * - * A-H = '000' = 0 - * I-P = '001' = 1 - * Y-Z,a-f = '011' = 3 + *

A-H = '000' = 0 I-P = '001' = 1 Y-Z,a-f = '011' = 3 * - * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved - * for the encoding version which only coincidentally works here because the version value is less than 8. + *

Note that there is no segment id field for the core segment. Instead the first 6 bits + * are reserved for the encoding version which only coincidentally works here because the + * version value is less than 8. */ - CharSequence encodedSegment = encodedSegments.get(i); if (encodedSegment.length() > 0) { char firstChar = encodedSegment.charAt(0); - if(firstChar >= 'A' && firstChar <= 'H') { + if (firstChar >= 'A' && firstChar <= 'H') { getSegment(0).decode(encodedSegment); - } else if(firstChar >= 'I' && firstChar <= 'P') { + } else if (firstChar >= 'I' && firstChar <= 'P') { getSegment(2).decode(encodedSegment); - } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { + } else if ((firstChar >= 'Y' && firstChar <= 'Z') + || (firstChar >= 'a' && firstChar <= 'f')) { getSegment(1).decode(encodedSegment); } else { throw new DecodingException("Invalid segment '" + encodedSegment + "'"); @@ -79,11 +82,11 @@ protected CharSequence doEncode() { encodedSegments.add(getSegment(0).encodeCharSequence()); encodedSegments.add(getSegment(1).encodeCharSequence()); - if(!this.getDisclosedVendors().isEmpty()) { + if (!this.getDisclosedVendors().isEmpty()) { encodedSegments.add(getSegment(2).encodeCharSequence()); } - return SlicedCharSequence.join('.', encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } @Override @@ -188,5 +191,4 @@ public Integer getDisclosedVendorsSegmentType() { public IntegerSet getDisclosedVendors() { return (IntegerSet) this.getFieldValue(TcfCaV1Field.DISCLOSED_VENDORS); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 48cbc5ef..dbcd95d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -1,13 +1,13 @@ package com.iab.gpp.encoder.section; -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.segment.TraditionalBase64Segment; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; public class TcfEuV2 extends EncodableSection { @@ -16,7 +16,11 @@ public class TcfEuV2 extends EncodableSection { public static final String NAME = "tcfeuv2"; public TcfEuV2() { - super(new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES)); + super( + new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES), + new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), + new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES), + new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES)); } public TcfEuV2(CharSequence encodedString) { @@ -46,29 +50,28 @@ public void doDecode(CharSequence encodedString) { for (int i = 0; i < numEncodedSegments; i++) { /** - * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. + * The first 3 bits contain the segment id. Rather than decode the entire string, just check + * the first character. * - * A-H = '000' = 0 - * I-P = '001' = 1 - * Q-X = '010' = 2 - * Y-Z,a-f = '011' = 3 + *

A-H = '000' = 0 I-P = '001' = 1 Q-X = '010' = 2 Y-Z,a-f = '011' = 3 * - * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved - * for the encoding version which only coincidentally works here because the version value is less than 8. + *

Note that there is no segment id field for the core segment. Instead the first 6 bits + * are reserved for the encoding version which only coincidentally works here because the + * version value is less than 8. */ - CharSequence encodedSegment = encodedSegments.get(i); if (encodedSegment.length() > 0) { char firstChar = encodedSegment.charAt(0); // unfortunately, the segment ordering doesn't match the segment ids - if(firstChar >= 'A' && firstChar <= 'H') { + if (firstChar >= 'A' && firstChar <= 'H') { getSegment(0).decode(encodedSegment); - } else if(firstChar >= 'I' && firstChar <= 'P') { + } else if (firstChar >= 'I' && firstChar <= 'P') { getSegment(3).decode(encodedSegment); - } else if(firstChar >= 'Q' && firstChar <= 'X') { + } else if (firstChar >= 'Q' && firstChar <= 'X') { getSegment(2).decode(encodedSegment); - } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { + } else if ((firstChar >= 'Y' && firstChar <= 'Z') + || (firstChar >= 'a' && firstChar <= 'f')) { getSegment(1).decode(encodedSegment); } else { throw new DecodingException("Invalid segment '" + encodedSegment + "'"); @@ -99,7 +102,7 @@ public CharSequence doEncode() { } } - return SlicedCharSequence.join('.', encodedSegments); + return SlicedCharSequence.join('.', encodedSegments); } @Override @@ -224,6 +227,4 @@ public Integer getVendorsDisclosedSegmentType() { public IntegerSet getVendorsDisclosed() { return (IntegerSet) this.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED); } - - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 7319eeae..c51eb0da 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -11,7 +11,9 @@ public class UsCa extends AbstractUsSectionWithGpc { public static final String NAME = "usca"; public UsCa() { - super(new Base64Segment<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES)); } public UsCa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 8adad7f5..63f6de51 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -11,7 +11,9 @@ public class UsCo extends AbstractUsSectionWithGpc { public static final String NAME = "usco"; public UsCo() { - super(new Base64Segment<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES)); } public UsCo(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index d1f06d17..5d1cdddc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -11,7 +11,9 @@ public class UsCt extends AbstractUsSectionWithGpc { public static final String NAME = "usct"; public UsCt() { - super(new Base64Segment<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES)); } public UsCt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index a0ddd15e..8fb0888e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -11,7 +11,9 @@ public class UsDe extends AbstractUsSectionWithGpc { public static final String NAME = "usde"; public UsDe() { - super(new Base64Segment<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES)); } public UsDe(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 65445d6a..918066b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -11,7 +11,9 @@ public class UsIa extends AbstractUsSectionWithGpc { public static final String NAME = "usia"; public UsIa() { - super(new Base64Segment<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES)); } public UsIa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 1168a0f0..972f661b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -11,7 +11,9 @@ public class UsMt extends AbstractUsSectionWithGpc { public static final String NAME = "usmt"; public UsMt() { - super(new Base64Segment<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES)); } public UsMt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index f4232999..5b6beb26 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -11,7 +11,9 @@ public class UsNe extends AbstractUsSectionWithGpc { public static final String NAME = "usne"; public UsNe() { - super(new Base64Segment<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES)); } public UsNe(CharSequence encodedString) { @@ -39,7 +41,6 @@ protected final UsNeField getGpcSegmentIncludedKey() { return UsNeField.GPC_SEGMENT_INCLUDED; } - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsNeField.PROCESSING_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 53bbd2d3..413357a4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -11,7 +11,9 @@ public class UsNh extends AbstractUsSectionWithGpc { public static final String NAME = "usnh"; public UsNh() { - super(new Base64Segment<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES)); } public UsNh(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 8d3714f6..2e996507 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -11,7 +11,9 @@ public class UsNj extends AbstractUsSectionWithGpc { public static final String NAME = "usnj"; public UsNj() { - super(new Base64Segment<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES)); } public UsNj(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 4de29c8f..ddd2be6e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -11,7 +11,9 @@ public class UsOr extends AbstractUsSectionWithGpc { public static final String NAME = "usor"; public UsOr() { - super(new Base64Segment<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES)); } public UsOr(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 504bb7da..89cf9842 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -11,7 +11,9 @@ public class UsTn extends AbstractUsSectionWithGpc { public static final String NAME = "ustn"; public UsTn() { - super(new Base64Segment<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES)); } public UsTn(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 4dce1398..40bac9d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -11,7 +11,9 @@ public class UsTx extends AbstractUsSectionWithGpc { public static final String NAME = "ustx"; public UsTx() { - super(new Base64Segment<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES), new Base64Segment<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES)); + super( + new Base64Segment<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES)); } public UsTx(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 8c0cc9da..4c81876f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -77,6 +77,4 @@ public Integer getMspaOptOutOptionMode() { public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsUtField.MSPA_SERVICE_PROVIDER_MODE); } - - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 8e49f8e4..090651a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -8,14 +8,15 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment { - +abstract class AbstractBase64Segment & FieldKey> + extends AbstractLazilyEncodableSegment { + protected AbstractBase64Segment(FieldNames fieldNames) { super(fieldNames); } protected abstract AbstractBase64UrlEncoder getBase64UrlEncoder(); - + @Override protected final CharSequence doEncode() { BitString bitString = new BitString(); @@ -45,12 +46,12 @@ protected final void doDecode(CharSequence encodedString) { } } } catch (Exception e) { - throw new DecodingException("Unable to decode "+ getClass().getSimpleName() +" '" + encodedString + "'", e); + throw new DecodingException( + "Unable to decode " + getClass().getSimpleName() + " '" + encodedString + "'", e); } } protected BitString decodeBitString(CharSequence encodedString) { return getBase64UrlEncoder().decode(encodedString); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 0d2f0a09..e6386caa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -4,7 +4,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -abstract class AbstractLazilyEncodableSegment & FieldKey> extends EncodableSegment { +abstract class AbstractLazilyEncodableSegment & FieldKey> + extends EncodableSegment { protected final FieldNames fieldNames; protected final Object[] values; @@ -92,5 +93,4 @@ public String toString() { sb.append('}'); return sb.toString(); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java index 126845e7..181e187a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java @@ -14,5 +14,4 @@ public Base64Segment(FieldNames fieldNames) { protected AbstractBase64UrlEncoder getBase64UrlEncoder() { return CompressedBase64UrlEncoder.getInstance(); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java index 52c2a61d..dc5368a6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java @@ -4,7 +4,7 @@ public class SegmentValueProvider & FieldKey> { private final E key; - + public SegmentValueProvider(E key) { this.key = key; } @@ -12,9 +12,8 @@ public SegmentValueProvider(E key) { public int modify(int original) { return original; } - + public final int extract(EncodableSegment segment) { return (Integer) segment.getFieldValueUnsafe(key); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java index dccbd52e..5b2610be 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java @@ -5,7 +5,8 @@ import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -public final class TraditionalBase64Segment & FieldKey> extends AbstractBase64Segment { +public final class TraditionalBase64Segment & FieldKey> + extends AbstractBase64Segment { public TraditionalBase64Segment(FieldNames fieldNames) { super(fieldNames); @@ -14,5 +15,4 @@ public TraditionalBase64Segment(FieldNames fieldNames) { protected AbstractBase64UrlEncoder getBase64UrlEncoder() { return TraditionalBase64UrlEncoder.getInstance(); } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index d87a5997..a57fe3d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -19,11 +19,12 @@ protected AbstractBase64UrlEncoder getBase64UrlEncoder() { protected BitString decodeBitString(CharSequence encodedString) { BitString bitString = super.decodeBitString(encodedString); // Necessary to maintain backwards compatibility when sensitive data processing changed from a - // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the + // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in + // the // DE, IA, NE, NH, NJ, TN release if (bitString.length() == 66) { BitString builder = new BitString(); - + builder.write(bitString, 0, 48); builder.writeEmpty(8); builder.write(bitString, 48, 52); @@ -33,5 +34,4 @@ protected BitString decodeBitString(CharSequence encodedString) { } return bitString; } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 4e952a93..9defd655 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -26,7 +26,7 @@ protected void doDecode(CharSequence encodedString) { } try { - setFieldValueUnsafe(UspV1Field.VERSION, (int)(encodedString.charAt(0) - '0')); + setFieldValueUnsafe(UspV1Field.VERSION, (int) (encodedString.charAt(0) - '0')); setFieldValueUnsafe(UspV1Field.NOTICE, encodedString.charAt(1)); setFieldValueUnsafe(UspV1Field.OPT_OUT_SALE, encodedString.charAt(2)); setFieldValueUnsafe(UspV1Field.LSPA_COVERED, encodedString.charAt(3)); @@ -34,6 +34,4 @@ protected void doDecode(CharSequence encodedString) { throw new DecodingException("Unable to decode UspV1CoreSegment '" + encodedString + "'", e); } } - } - diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 11721096..e009c089 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -1,14 +1,5 @@ package com.iab.gpp.encoder; -import java.time.Instant; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.field.TcfEuV2Field; @@ -48,10 +39,20 @@ import com.iab.gpp.encoder.section.UsUt; import com.iab.gpp.encoder.section.UsVa; import com.iab.gpp.encoder.section.UspV1; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class GppModelTest { - private Instant utcDateTime = ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(); + private Instant utcDateTime = + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(); @Test public void testEncodeDefault() { @@ -75,7 +76,6 @@ public void testEncodeDefault() { Assertions.assertEquals(false, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -126,8 +126,6 @@ public void testEncodeDefaultAll() { gppModel.setFieldValue(UsNj.NAME, UsNjField.VERSION, UsNj.VERSION); gppModel.setFieldValue(UsTn.NAME, UsTnField.VERSION, UsTn.VERSION); - - Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); @@ -150,22 +148,26 @@ public void testEncodeDefaultAll() { String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", - gppString); + "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", + gppString); } @Test public void testDecodingException() { - Assertions.assertThrows(DecodingException.class, () -> { - new GppModel("invalid gpp string").getHeader(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new GppModel("invalid gpp string").getHeader(); + }); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new GppModel("z").getUsCtSection(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new GppModel("z").getUsCtSection(); + }); } @Test @@ -192,8 +194,6 @@ public void testEncodeUspv1() { Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - - String gppString = gppModel.encode(); Assertions.assertEquals("DBABTA~1YNN", gppString); @@ -205,7 +205,6 @@ public void testEncodeUspv1() { Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -241,9 +240,9 @@ public void testEncodeTcfEuV2() { Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - String gppString = gppModel.encode(); - Assertions.assertEquals("DBABMA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", gppString); + Assertions.assertEquals( + "DBABMA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", gppString); Assertions.assertEquals(2, gppString.split("~").length); @@ -255,7 +254,6 @@ public void testEncodeTcfEuV2() { Assertions.assertEquals(false, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -292,7 +290,8 @@ public void testEncodeUspV1AndTcfEuV2() { Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); String gppString = gppModel.encode(); - Assertions.assertEquals("DBACNYA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~1YNN", gppString); + Assertions.assertEquals( + "DBACNYA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~1YNN", gppString); Assertions.assertEquals(3, gppString.split("~").length); @@ -300,7 +299,6 @@ public void testEncodeUspV1AndTcfEuV2() { Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -314,7 +312,6 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_ID, 880); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_VERSION, 0); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_SCREEN, 0); @@ -328,7 +325,6 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); - Assertions.assertEquals(Arrays.asList(2), gppModel.getSectionIds()); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.ID)); @@ -354,23 +350,34 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CMP_VERSION, 2); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_LIST_VERSION, 413); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.USE_NON_STANDARD_STACKS, true); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, Arrays.asList(6, 7, 8, 9, 10, 11)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, Arrays.asList(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, Arrays.asList(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48)); + gppModel.setFieldValue( + TcfCaV1.NAME, TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30)); + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, Arrays.asList(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, + gppModel.setFieldValue( + TcfCaV1.NAME, + TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, - List.of(1)); - gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, - List.of(0,2)); + gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, List.of(1)); + gppModel.setFieldValue( + TcfCaV1.NAME, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, List.of(0, 2)); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfCaV1.NAME, TcfCaV1Field.LAST_UPDATED, utcDateTime); @@ -383,7 +390,6 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); - String gppString = gppModel.encode(); Assertions.assertEquals( "DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN", @@ -413,7 +419,6 @@ public void testDecodeDefaults() { Assertions.assertEquals(false, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - } @Test @@ -484,29 +489,44 @@ public void testDecodeTcfEuV2() { Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.LAST_UPDATED)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VERSION)); Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); } @Test @@ -523,7 +543,6 @@ public void testDecodeUspv1AndTcfEuV2() { Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); - Assertions.assertEquals('Y', gppModel.getFieldValue(UspV1.ID, UspV1Field.NOTICE)); Assertions.assertEquals('N', gppModel.getFieldValue(UspV1.ID, UspV1Field.OPT_OUT_SALE)); Assertions.assertEquals('N', gppModel.getFieldValue(UspV1.ID, UspV1Field.LSPA_COVERED)); @@ -536,29 +555,44 @@ public void testDecodeUspv1AndTcfEuV2() { Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.ID, TcfEuV2Field.LAST_UPDATED)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VERSION)); Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); TcfEuV2 tcfEuV2Section = (TcfEuV2) gppModel.getSection(TcfEuV2.NAME); Integer tcfEuV2Version = tcfEuV2Section.getVersion(); @@ -592,15 +626,23 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(880, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_ID)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_SCREEN)); - Assertions.assertEquals("EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); - Assertions.assertEquals(48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals( + "EN", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals( + 48, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_LIST_VERSION)); Assertions.assertEquals(2, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.POLICY_VERSION)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); - Assertions.assertEquals(false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); - Assertions.assertEquals("AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); - Assertions.assertEquals(utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals( + false, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals( + "AA", gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED)); + Assertions.assertEquals( + utcDateTime, gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED)); TcfEuV2 tcfEuV2Section = (TcfEuV2) gppModel.getSection(TcfEuV2.NAME); Integer tcfEuV2Version = tcfEuV2Section.getVersion(); @@ -619,27 +661,24 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { Assertions.assertEquals(2, tcfCaV1Section.getCmpVersion()); Assertions.assertEquals(413, tcfCaV1Section.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1Section.getUseNonStandardStacks()); - Assertions.assertTrue(tcfCaV1Section.getSpecialFeatureExpressConsent().intStream().anyMatch(x -> x== 7)); - Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12), - tcfCaV1Section.getSpecialFeatureExpressConsent()); - Assertions - .assertEquals( - Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), - tcfCaV1Section.getPurposesExpressConsent()); - Assertions - .assertEquals( - Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), - tcfCaV1Section.getPurposesImpliedConsent()); + Assertions.assertTrue( + tcfCaV1Section.getSpecialFeatureExpressConsent().intStream().anyMatch(x -> x == 7)); + Assertions.assertEquals( + Set.of(7, 8, 9, 10, 11, 12), tcfCaV1Section.getSpecialFeatureExpressConsent()); + Assertions.assertEquals( + Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), + tcfCaV1Section.getPurposesExpressConsent()); + Assertions.assertEquals( + Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), + tcfCaV1Section.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(12, 24, 48), tcfCaV1Section.getVendorExpressConsent()); Assertions.assertEquals(Set.of(18, 30), tcfCaV1Section.getVendorImpliedConsent()); - Assertions - .assertEquals( - Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), - tcfCaV1Section.getPubPurposesExpressConsent()); - Assertions - .assertEquals( - Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), - tcfCaV1Section.getPubPurposesImpliedConsent()); + Assertions.assertEquals( + Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), + tcfCaV1Section.getPubPurposesExpressConsent()); + Assertions.assertEquals( + Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), + tcfCaV1Section.getPubPurposesImpliedConsent()); Assertions.assertEquals(3, tcfCaV1Section.getNumCustomPurposes()); Assertions.assertEquals(Set.of(2), tcfCaV1Section.getCustomPurposesExpressConsent()); Assertions.assertEquals(Set.of(1, 3), tcfCaV1Section.getCustomPurposesImpliedConsent()); @@ -662,7 +701,8 @@ public void testEncode1() { Assertions.assertEquals(true, gppModel.getTcfEuV2Section().hasField(TcfEuV2Field.VERSION)); gppModel.toString(); - Assertions.assertEquals("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA", gppModel.encode()); + Assertions.assertEquals( + "DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA", gppModel.encode()); } @Test @@ -673,7 +713,8 @@ public void testEncode2() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); - Assertions.assertEquals("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA", gppModel.encode()); + Assertions.assertEquals( + "DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA", gppModel.encode()); } @Test @@ -684,34 +725,39 @@ public void testEncode3() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); - Assertions.assertEquals("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA", + Assertions.assertEquals( + "DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA", gppModel.encode()); } @Test public void testDecode1() { - GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA"); - Assertions.assertEquals(Set.of(28), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + GppModel gppModel = + new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA"); + Assertions.assertEquals( + Set.of(28), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } @Test public void testDecode2() { - GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA"); - Assertions.assertEquals(Set.of(29), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + GppModel gppModel = + new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA"); + Assertions.assertEquals( + Set.of(29), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } @Test public void testDecode3() { - GppModel gppModel = new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA"); - Assertions.assertEquals(Set.of(1, 173, 722), - gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); + GppModel gppModel = + new GppModel("DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA"); + Assertions.assertEquals( + Set.of(1, 173, 722), gppModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); } - + @Test public void testDecode4() { GppModel gppModel = new GppModel("DBABTA~1YYN"); gppModel.getFieldValue(UspV1.NAME, UspV1Field.VERSION); - } @Test @@ -719,57 +765,68 @@ public void testDecode5() { GppModel gppModel = new GppModel("DBABLA~BVQqAAAAAgA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); } - + @Test public void testDecode6() { GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAQA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); - Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); - Assertions.assertEquals(Arrays.asList(0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testDecode7() { GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAABA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); - Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); - Assertions.assertEquals(Arrays.asList(0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testDecode8() { GppModel gppModel = new GppModel("DBABLA~BAAAAAABEQA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); - Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); - Assertions.assertEquals(Arrays.asList(0, 1, 0), + Assertions.assertEquals( + Arrays.asList(0, 1, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testDecode9() { GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAQRA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); - Assertions.assertEquals(Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); - Assertions.assertEquals(Arrays.asList(0, 0, 1), + Assertions.assertEquals( + Arrays.asList(0, 0, 1), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } - + @Test public void testConsistency() { GppModel fromObjectModel = new GppModel(); - fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, - Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)); - fromObjectModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS, + fromObjectModel.setFieldValue( + TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS, Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)); + fromObjectModel.setFieldValue( + TcfEuV2.NAME, + TcfEuV2Field.VENDOR_CONSENTS, Arrays.asList(32, 128, 81, 210, 755, 21, 173, 238)); - Assertions.assertEquals(fromObjectModel.getSection(TcfEuV2.NAME).encode(), + Assertions.assertEquals( + fromObjectModel.getSection(TcfEuV2.NAME).encode(), fromObjectModel.getSection(TcfEuV2.NAME).encode()); Assertions.assertEquals(fromObjectModel.encode(), fromObjectModel.encode()); @@ -778,9 +835,9 @@ public void testConsistency() { Assertions.assertEquals( Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.PURPOSE_CONSENTS)); - Assertions.assertEquals(Set.of(21, 32, 81, 128, 173, 210, 238, 755), + Assertions.assertEquals( + Set.of(21, 32, 81, 128, 173, 210, 238, 755), decodedModel.getFieldValue(TcfEuV2.NAME, TcfEuV2Field.VENDOR_CONSENTS)); - } @Test @@ -828,13 +885,13 @@ public void testDecodingEmptyString() { @Test public void testDecodingExceptionValidStringButNotGPP() { try { - GppModel gppModel = new GppModel("DP48G0AP48G0AEsACCPLAkEgAAAAAEPgAB5YAAAQaQD2F2K2kKFkPCmQWYAQBCijYEAhQAAAAkCBIAAgAUgQAgFIIAgAIFAAAAAAAAAQEgCQAAQABAAAIACgAAAAAAIAAAAAAAQQAAAAAIAAAAAAAAEAAAAAAAQAAAAIAABEhCAAQQAEAAAAAAAQAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAgAA"); + GppModel gppModel = + new GppModel( + "DP48G0AP48G0AEsACCPLAkEgAAAAAEPgAB5YAAAQaQD2F2K2kKFkPCmQWYAQBCijYEAhQAAAAkCBIAAgAUgQAgFIIAgAIFAAAAAAAAAQEgCQAAQABAAAIACgAAAAAAIAAAAAAAQQAAAAAIAAAAAAAAEAAAAAAAQAAAAIAABEhCAAQQAEAAAAAAAQAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAgAA"); gppModel.getHeader().getName(); Assertions.fail("Expected LazyDecodingException"); } catch (DecodingException e) { } } - - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index e9821ca9..255cdc90 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -7,21 +7,25 @@ public class TraditionalBase64UrlEncoderTest { private TraditionalBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - - @Test public void testDecode1() { - Assertions.assertEquals("000011000001000000000001001100000000000000000000", base64UrlEncoder.decode("DBABMAAA").toString()); + Assertions.assertEquals( + "000011000001000000000001001100000000000000000000", + base64UrlEncoder.decode("DBABMAAA").toString()); } @Test public void testDecode2() { - Assertions.assertEquals("000011000001000000000010001101011000000000000000", base64UrlEncoder.decode("DBACNYAA").toString()); + Assertions.assertEquals( + "000011000001000000000010001101011000000000000000", + base64UrlEncoder.decode("DBACNYAA").toString()); } @Test public void testDecode3() { - Assertions.assertEquals("000011000001000000000001100011110000000000000000", base64UrlEncoder.decode("DBABjwAA").toString()); + Assertions.assertEquals( + "000011000001000000000001100011110000000000000000", + base64UrlEncoder.decode("DBABjwAA").toString()); } @Test @@ -41,5 +45,4 @@ public void testDifferingLengthDecodes() { Assertions.assertEquals(out.toString(), base64UrlEncoder.decode(in.toString()).toString()); } } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java index dbbc28b0..4f1a9e84 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import static org.junit.jupiter.api.Assertions.*; + import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; @@ -9,9 +10,9 @@ class DirtyableListTest { @Test void test() { - RangeEntry item1 = new RangeEntry(1, 2, Set.of(3,4,5)); - RangeEntry item2 = new RangeEntry(6, 7, Set.of(8,9,10)); - RangeEntry item3 = new RangeEntry(11, 12, Set.of(13,14,15)); + RangeEntry item1 = new RangeEntry(1, 2, Set.of(3, 4, 5)); + RangeEntry item2 = new RangeEntry(6, 7, Set.of(8, 9, 10)); + RangeEntry item3 = new RangeEntry(11, 12, Set.of(13, 14, 15)); DirtyableList list = new DirtyableList<>(); list.add(item1); list.addAll(List.of(item2, item3)); @@ -26,7 +27,7 @@ void test() { assertFalse(list.isDirty()); item2.getIds().remove(9); assertTrue(list.isDirty()); - RangeEntry item2a = new RangeEntry(100, 200, Set.of(300,400,500)); + RangeEntry item2a = new RangeEntry(100, 200, Set.of(300, 400, 500)); assertEquals(item2, list.set(1, item2a)); assertEquals(item2a, list.get(1)); assertEquals(item3, list.remove(2)); @@ -34,5 +35,4 @@ void test() { list.add(item3); assertEquals(List.of(item1, item2a, item3), list); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index d64fbae6..6b5996a3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -1,19 +1,19 @@ package com.iab.gpp.encoder.datatype; -import java.util.Set; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.UsNatField; +import java.util.Set; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class EncodableFixedIntegerRangeTest { @Test public void testEncode1() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); + EncodableFixedIntegerRange encodableFixedIntegerRange = + new EncodableFixedIntegerRange<>(""); IntegerSet integerSet = new IntegerSet(); integerSet.add(28); BitString builder = new BitString(); @@ -23,7 +23,8 @@ public void testEncode1() throws EncodingException { @Test public void testEncode2() throws EncodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); + EncodableFixedIntegerRange encodableFixedIntegerRange = + new EncodableFixedIntegerRange<>(""); IntegerSet integerSet = new IntegerSet(); integerSet.add(29); BitString builder = new BitString(); @@ -33,14 +34,19 @@ public void testEncode2() throws EncodingException { @Test public void testDecode1() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); - Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); + EncodableFixedIntegerRange encodableFixedIntegerRange = + new EncodableFixedIntegerRange<>(""); + Assertions.assertEquals( + Set.of(28), + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100"), null)); } @Test public void testDecode2() throws DecodingException { - EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange<>(""); - Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); + EncodableFixedIntegerRange encodableFixedIntegerRange = + new EncodableFixedIntegerRange<>(""); + Assertions.assertEquals( + Set.of(29), + encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101"), null)); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index d527d26e..9245ad34 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -1,16 +1,16 @@ package com.iab.gpp.encoder.datatype; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.field.UsNatField; import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.field.UsNatField; - public class EncodableOptimizedFixedRangeTest { - private EncodableOptimizedFixedRange encodableOptimizedFixedRange = new EncodableOptimizedFixedRange<>(""); + private EncodableOptimizedFixedRange encodableOptimizedFixedRange = + new EncodableOptimizedFixedRange<>(""); @Test public void testEncode1() { @@ -18,8 +18,8 @@ public void testEncode1() { integerSet.addAll(Arrays.asList(12, 24, 48)); BitString builder = new BitString(); encodableOptimizedFixedRange.encode(builder, integerSet, null); - Assertions.assertEquals("00000000001100000000000000001000000000001000000000000000000000001", - builder.toString()); + Assertions.assertEquals( + "00000000001100000000000000001000000000001000000000000000000000001", builder.toString()); } @Test @@ -51,21 +51,34 @@ public void testEncode4() { @Test public void testDecode1() { - Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"), null)); + Assertions.assertEquals( + Set.of(12, 24, 48), + encodableOptimizedFixedRange.decode( + BitString.of("00000000001100000000000000001000000000001000000000000000000000001"), + null)); } @Test public void testDecode2() { - Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001"), null)); + Assertions.assertEquals( + Set.of(18, 30), + encodableOptimizedFixedRange.decode( + BitString.of("00000000000111100000000000000000001000000000001"), null)); } @Test public void testDecode3() { - Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001"), null)); + Assertions.assertEquals( + Set.of(28), + encodableOptimizedFixedRange.decode( + BitString.of("000000000001110000000000000000000000000000001"), null)); } @Test public void testDecode4() { - Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101"), null)); + Assertions.assertEquals( + Set.of(29), + encodableOptimizedFixedRange.decode( + BitString.of("0000000000011101100000000000100000000000011101"), null)); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java index 360cd604..9ab09f75 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListEncoderTest.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.UsNatField; +import java.util.ArrayList; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedIntegerListEncoderTest { @@ -151,7 +150,8 @@ public void testEncode19() { } private FixedIntegerList decode(String str) { - EncodableFixedIntegerList encodable = new EncodableFixedIntegerList<>("", 2, 2, null); + EncodableFixedIntegerList encodable = + new EncodableFixedIntegerList<>("", 2, 2, null); return encodable.decode(BitString.of(str), null); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java index 69b27b10..a8ab9eca 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.datatype; import static org.junit.jupiter.api.Assertions.*; + import java.util.List; import org.junit.jupiter.api.Test; @@ -18,7 +19,7 @@ void test() { assertThrows(IllegalArgumentException.class, () -> list.set(4, 128)); assertThrows(IllegalArgumentException.class, () -> list.set(4, -1)); assertEquals(5, list.size()); - assertEquals(List.of(2,1,5,8,3), list); + assertEquals(List.of(2, 1, 5, 8, 3), list); assertEquals(2, list.get(0)); assertEquals(1, list.get(1)); assertEquals(5, list.get(2)); @@ -28,5 +29,4 @@ void test() { list.setDirty(false); assertFalse(list.isDirty()); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java index d755cb51..0dcbd37c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/BooleanEncoderTest.java @@ -1,10 +1,9 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class BooleanEncoderTest { @@ -51,5 +50,4 @@ public void testDecode4() { } } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java index 7e35100d..652e9644 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.datatype.encoder; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.error.DecodingException; import java.time.Instant; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; - public class DatetimeEncoderTest { @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 103e7545..54b4c8e5 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FibonacciIntegerEncoderTest { @@ -61,8 +60,8 @@ public void testEncode7() { @Test public void testEncodeTooLarge() { BitString builder = new BitString(); - Assertions.assertThrows(EncodingException.class, () -> - builder.writeFibonacci(Integer.MAX_VALUE)); + Assertions.assertThrows( + EncodingException.class, () -> builder.writeFibonacci(Integer.MAX_VALUE)); } private int decode(String str) { @@ -106,8 +105,7 @@ public void testDecode7() throws DecodingException { @Test public void testDecodeTooLarge() { - Assertions.assertThrows(DecodingException.class, () -> - decode("0001010001000101001000001001000100001000100011")); + Assertions.assertThrows( + DecodingException.class, () -> decode("0001010001000101001000001001000100001000100011")); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index 24905960..15296f02 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; +import com.iab.gpp.encoder.error.DecodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.IntegerSet; -import com.iab.gpp.encoder.error.DecodingException; - public class FibonacciIntegerRangeEncoderTest { @Test @@ -62,7 +61,7 @@ public void testEncode7() { FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12)); Assertions.assertEquals("00000000001000111001101011", builder.toString()); } - + private IntegerSet decode(String str) { return FibonacciIntegerRangeEncoder.decode(BitString.of(str)); } @@ -89,14 +88,13 @@ public void testDecode4() throws DecodingException { @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), - decode("0000000000100001110110011")); + Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), decode("0000000000100001110110011")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(Set.of(2, 5, 6, 7, 8, 9, 10, 11, 12), - decode("00000000001000111001101011")); + Assertions.assertEquals( + Set.of(2, 5, 6, 7, 8, 9, 10, 11, 12), decode("00000000001000111001101011")); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 45a2feb0..e8ea82e7 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.Set; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; +import java.util.Set; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedBitfieldEncoderTest { @@ -74,17 +73,17 @@ public void testEncode7() { @Test public void testEncode8() { IntegerSet set = new IntegerSet(5); - for(int i = 0; i <= 10; i++) { + for (int i = 0; i <= 10; i++) { set.addInt(i); } - Assertions.assertEquals(Set.of(0,1,2,3,4), set); + Assertions.assertEquals(Set.of(0, 1, 2, 3, 4), set); } @Test public void testEncode9() { IntegerSet set = new IntegerSet(5); - set.addRange(0,10); - Assertions.assertEquals(Set.of(0,1,2,3,4), set); + set.addRange(0, 10); + Assertions.assertEquals(Set.of(0, 1, 2, 3, 4), set); } private IntegerSet decode(String str) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index d1fbbb47..ff6f8035 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedIntegerEncoderTest { @@ -43,7 +42,7 @@ public void testEncode5() { builder.writeInt(7, 8); Assertions.assertEquals("00000111", builder.toString()); } - + @Test public void testEncode6() { try { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 7d76b98f..d8a9f8c3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.datatype.encoder; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.IntegerSet; +import com.iab.gpp.encoder.error.DecodingException; import java.util.ArrayList; import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.datatype.IntegerSet; -import com.iab.gpp.encoder.error.DecodingException; - public class FixedIntegerRangeEncoderTest { @Test @@ -30,16 +29,15 @@ public void testEncode2() { public void testEncode3() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 3, 4, 5, 6)); - Assertions.assertEquals("000000000001100000000000000100000000000000110", - builder.toString()); + Assertions.assertEquals("000000000001100000000000000100000000000000110", builder.toString()); } @Test public void testEncode4() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7)); - Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - builder.toString()); + Assertions.assertEquals( + "00000000001000000000000000010100000000000001010000000000000111", builder.toString()); } @Test @@ -48,31 +46,32 @@ public void testEncode5() { IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FixedIntegerRangeEncoder.encode(builder, set); - Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", - builder.toString()); + Assertions.assertEquals( + "00000000001000000000000000010100000000000001010000000000000111", builder.toString()); } @Test public void testEncode6() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(3, 5, 6, 7, 8)); - Assertions.assertEquals("00000000001000000000000000011100000000000001010000000000001000", - builder.toString()); + Assertions.assertEquals( + "00000000001000000000000000011100000000000001010000000000001000", builder.toString()); } @Test public void testEncode7() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48)); - Assertions.assertEquals("000000000011000000000000011000000000000001100000000000000110000", - builder.toString()); + Assertions.assertEquals( + "000000000011000000000000011000000000000001100000000000000110000", builder.toString()); } @Test public void testEncode8() { BitString builder = new BitString(); FixedIntegerRangeEncoder.encode(builder, Arrays.asList(12, 24, 48, 49)); - Assertions.assertEquals("0000000000110000000000000110000000000000011000100000000001100000000000000110001", + Assertions.assertEquals( + "0000000000110000000000000110000000000000011000100000000001100000000000000110001", builder.toString()); } @@ -101,37 +100,44 @@ public void testDecode2() throws DecodingException { @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), - decode("000000000001100000000000000100000000000000110")); + Assertions.assertEquals( + Set.of(2, 3, 4, 5, 6), decode("000000000001100000000000000100000000000000110")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(Set.of(2, 5, 6, 7), + Assertions.assertEquals( + Set.of(2, 5, 6, 7), decode("00000000001000000000000000010100000000000001010000000000000111")); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), + Assertions.assertEquals( + Set.of(3, 5, 6, 7, 8), decode("00000000001000000000000000011100000000000001010000000000001000")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(Set.of(12, 24, 48), + Assertions.assertEquals( + Set.of(12, 24, 48), decode("000000000011000000000000011000000000000001100000000000000110000")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(Set.of(12, 24, 48, 49), decode("0000000000110000000000000110000000000000011000100000000001100000000000000110001")); + Assertions.assertEquals( + Set.of(12, 24, 48, 49), + decode("0000000000110000000000000110000000000000011000100000000001100000000000000110001")); } @Test public void testDecode8() throws DecodingException { - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), decode( - "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010")); + Assertions.assertEquals( + Set.of(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), + decode( + "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010")); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index 50fea8bb..fec0583e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedLongEncoderTest { @@ -44,14 +43,13 @@ public void testEncode5() { Assertions.assertEquals("00000111", builder.toString()); } - @Test public void testEncode6() { BitString builder = new BitString(); builder.writeLong(16630898421L, 36); Assertions.assertEquals("001111011111010001110101111011110101", builder.toString()); } - + @Test public void testEncode7() { try { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index 9a5c9340..78c1e0b6 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -1,11 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class FixedStringEncoderTest { @@ -37,7 +36,7 @@ public void testEncode3() { private String decode(String str) { return FixedStringEncoder.decode(BitString.of(str), str.length() / 6); } - + @Test public void testDecode1() { Assertions.assertEquals("AB", decode("000000000001")); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java index acd64a61..d2f32236 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java @@ -1,12 +1,13 @@ package com.iab.gpp.encoder.datatype.encoder; import static org.junit.jupiter.api.Assertions.*; + +import com.iab.gpp.encoder.datatype.IntegerSet; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.datatype.IntegerSet; class IntegerSetTest { @@ -18,34 +19,33 @@ void test() { set.add(0); set.add(2); set.add(3); - assertEquals(Set.of(0,2,3), set); + assertEquals(Set.of(0, 2, 3), set); assertTrue(set.isDirty()); assertFalse(set.isEmpty()); assertEquals(3, set.size()); assertFalse(set.remove(1)); assertTrue(set.remove(2)); assertEquals(2, set.size()); - set.addAll(List.of(3,4)); - assertEquals(Set.of(0,3,4), set); + set.addAll(List.of(3, 4)); + assertEquals(Set.of(0, 3, 4), set); List out = new ArrayList<>(); Iterator it = set.iterator(); it.forEachRemaining(out::add); - assertEquals(List.of(0,3,4), out); + assertEquals(List.of(0, 3, 4), out); assertFalse(set.contains(2)); assertTrue(set.contains(3)); assertTrue(set.isDirty()); set.setDirty(false); assertFalse(set.isDirty()); - set.retainAll(Set.of(1,2,3)); + set.retainAll(Set.of(1, 2, 3)); assertEquals(Set.of(3), set); - assertTrue(set.addAll(List.of(1,3,4))); - assertFalse(set.addAll(List.of(1,3,4))); - assertTrue(set.removeAll(List.of(3,4))); + assertTrue(set.addAll(List.of(1, 3, 4))); + assertFalse(set.addAll(List.of(1, 3, 4))); + assertTrue(set.removeAll(List.of(3, 4))); assertEquals(Set.of(1), set); set.clear(); assertTrue(set.isEmpty()); set.addRange(1, 3); - assertEquals(Set.of(1,2), set); + assertEquals(Set.of(1, 2), set); } - } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java index 94bb60c7..60a9479f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/HeaderV1Test.java @@ -1,12 +1,12 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.field.HeaderV1Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.HeaderV1Field; public class HeaderV1Test { @@ -37,7 +37,8 @@ public void testDecode1() { headerV1.decode("DBAA"); Assertions.assertEquals(Set.of(), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); + Assertions.assertEquals( + headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test @@ -46,7 +47,8 @@ public void testDecode2() { headerV1.decode("DBABMA"); Assertions.assertEquals(Set.of(2), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); + Assertions.assertEquals( + headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test @@ -55,13 +57,16 @@ public void testDecode3() { headerV1.decode("DBACNYA"); Assertions.assertEquals(Set.of(2, 6), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); + Assertions.assertEquals( + headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new HeaderV1("z").getSectionsIds(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new HeaderV1("z").getSectionsIds(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java index 8b6ecf76..60392396 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java @@ -1,6 +1,10 @@ package com.iab.gpp.encoder.section; - +import com.iab.gpp.encoder.datatype.RangeEntry; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.EncodingException; +import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.TcfCaV1Field; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -9,11 +13,6 @@ import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.TcfCaV1Field; public class TcfCaV1Test { @@ -21,9 +20,14 @@ public class TcfCaV1Test { public void testEncode1() { TcfCaV1 tcfCaV1 = new TcfCaV1(); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA", tcfCaV1.encode()); + tcfCaV1.setFieldValue( + TcfCaV1Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + Assertions.assertEquals( + "BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA", tcfCaV1.encode()); } @Test @@ -34,38 +38,53 @@ public void testEncode2() { tcfCaV1.setFieldValue(TcfCaV1Field.CMP_VERSION, 2); tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_LIST_VERSION, 413); tcfCaV1.setFieldValue(TcfCaV1Field.USE_NON_STANDARD_STACKS, true); - tcfCaV1.setFieldValue(TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, - Arrays.asList(6, 7, 8, 9, 10, 11)); - tcfCaV1.setFieldValue(TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, + tcfCaV1.setFieldValue( + TcfCaV1Field.SPECIAL_FEATURE_EXPRESS_CONSENT, Arrays.asList(6, 7, 8, 9, 10, 11)); + tcfCaV1.setFieldValue( + TcfCaV1Field.PURPOSES_EXPRESS_CONSENT, Arrays.asList(0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17)); - tcfCaV1.setFieldValue(TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, + tcfCaV1.setFieldValue( + TcfCaV1Field.PURPOSES_IMPLIED_CONSENT, Arrays.asList(6, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 23)); tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, Arrays.asList(12, 24, 48)); tcfCaV1.setFieldValue(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, Arrays.asList(18, 30)); - tcfCaV1.setFieldValue(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, + tcfCaV1.setFieldValue( + TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, Arrays.asList(0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20)); - tcfCaV1.setFieldValue(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, + tcfCaV1.setFieldValue( + TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, Arrays.asList(3, 4, 5, 9, 10, 11, 15, 16, 17, 21, 22, 23)); tcfCaV1.setFieldValue(TcfCaV1Field.NUM_CUSTOM_PURPOSES, 3); tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, Set.of(1)); - tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Set.of(0,2)); + tcfCaV1.setFieldValue(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, Set.of(0, 2)); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao", tcfCaV1.encode()); + Assertions.assertEquals( + "BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao", tcfCaV1.encode()); } @Test public void testEncode3() throws EncodingException, InvalidFieldException { TcfCaV1 tcfCaV1 = new TcfCaV1(); - tcfCaV1.setFieldValue(TcfCaV1Field.DISCLOSED_VENDORS, Arrays.asList(1, 2, 3, 5, 6, 7, 10, 11, 12)); + tcfCaV1.setFieldValue( + TcfCaV1Field.DISCLOSED_VENDORS, Arrays.asList(1, 2, 3, 5, 6, 7, 10, 11, 12)); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.IAGO5w", tcfCaV1.encode()); + Assertions.assertEquals( + "BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.IAGO5w", tcfCaV1.encode()); } @Test @@ -77,9 +96,15 @@ public void testEncode4() throws EncodingException, InvalidFieldException { TcfCaV1 tcfCaV1 = new TcfCaV1(); tcfCaV1.setFieldValue(TcfCaV1Field.PUB_RESTRICTIONS, pubRestrictions); - tcfCaV1.setFieldValue(TcfCaV1Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfCaV1.setFieldValue(TcfCaV1Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAACCgBwABAAOAAoADgAJA.YAAAAAAAAAA", tcfCaV1.encode()); + tcfCaV1.setFieldValue( + TcfCaV1Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfCaV1.setFieldValue( + TcfCaV1Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + Assertions.assertEquals( + "BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAACCgBwABAAOAAoADgAJA.YAAAAAAAAAA", + tcfCaV1.encode()); } @Test @@ -90,30 +115,22 @@ public void testDecode1() { Assertions.assertEquals(0, tcfCaV1.getCmpVersion()); Assertions.assertEquals(0, tcfCaV1.getVendorListVersion()); Assertions.assertEquals(false, tcfCaV1.getUseNonStandardStacks()); - Assertions.assertEquals( - Set.of(), - tcfCaV1.getSpecialFeatureExpressConsent()); - Assertions - .assertEquals( - Set.of(), - tcfCaV1.getPurposesExpressConsent()); - Assertions - .assertEquals( - Set.of(), - tcfCaV1.getPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getSpecialFeatureExpressConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getPurposesExpressConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getVendorExpressConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getVendorImpliedConsent()); - Assertions.assertEquals( - Set.of(), - tcfCaV1.getPubPurposesExpressConsent()); - Assertions.assertEquals( - Set.of(), - tcfCaV1.getPubPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getPubPurposesExpressConsent()); + Assertions.assertEquals(Set.of(), tcfCaV1.getPubPurposesImpliedConsent()); Assertions.assertEquals(0, tcfCaV1.getNumCustomPurposes()); Assertions.assertEquals(Set.of(), tcfCaV1.getCustomPurposesExpressConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getCustomPurposesImpliedConsent()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getLastUpdated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfCaV1.getCreated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfCaV1.getLastUpdated()); Assertions.assertEquals("EN", tcfCaV1.getConsentLanguage()); Assertions.assertEquals(5, tcfCaV1.getId()); @@ -122,33 +139,34 @@ public void testDecode1() { @Test public void testDecode2() { - TcfCaV1 tcfCaV1 = new TcfCaV1("BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao"); + TcfCaV1 tcfCaV1 = + new TcfCaV1("BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao"); Assertions.assertEquals(50, tcfCaV1.getCmpId()); Assertions.assertEquals(2, tcfCaV1.getCmpVersion()); Assertions.assertEquals(413, tcfCaV1.getVendorListVersion()); Assertions.assertEquals(true, tcfCaV1.getUseNonStandardStacks()); - Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12), - tcfCaV1.getSpecialFeatureExpressConsent()); - Assertions.assertEquals(Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), - tcfCaV1.getPurposesExpressConsent()); - Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), - tcfCaV1.getPurposesImpliedConsent()); + Assertions.assertEquals(Set.of(7, 8, 9, 10, 11, 12), tcfCaV1.getSpecialFeatureExpressConsent()); + Assertions.assertEquals( + Set.of(1, 2, 3, 4, 5, 6, 13, 14, 15, 16, 17, 18), tcfCaV1.getPurposesExpressConsent()); + Assertions.assertEquals( + Set.of(7, 8, 9, 10, 11, 12, 19, 20, 21, 22, 23, 24), tcfCaV1.getPurposesImpliedConsent()); Assertions.assertEquals(Set.of(12, 24, 48), tcfCaV1.getVendorExpressConsent()); Assertions.assertEquals(Set.of(18, 30), tcfCaV1.getVendorImpliedConsent()); - Assertions - .assertEquals( - Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), - tcfCaV1.getPubPurposesExpressConsent()); - Assertions - .assertEquals( - Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), - tcfCaV1.getPubPurposesImpliedConsent()); + Assertions.assertEquals( + Set.of(1, 2, 3, 7, 8, 9, 13, 14, 15, 19, 20, 21), tcfCaV1.getPubPurposesExpressConsent()); + Assertions.assertEquals( + Set.of(4, 5, 6, 10, 11, 12, 16, 17, 18, 22, 23, 24), + tcfCaV1.getPubPurposesImpliedConsent()); Assertions.assertEquals(3, tcfCaV1.getNumCustomPurposes()); Assertions.assertEquals(Set.of(2), tcfCaV1.getCustomPurposesExpressConsent()); Assertions.assertEquals(Set.of(1, 3), tcfCaV1.getCustomPurposesImpliedConsent()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfCaV1.getLastUpdated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfCaV1.getCreated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfCaV1.getLastUpdated()); Assertions.assertEquals("EN", tcfCaV1.getConsentLanguage()); Assertions.assertEquals(5, tcfCaV1.getId()); @@ -165,7 +183,8 @@ public void testDecode3() throws DecodingException { @Test public void testDecode4() throws DecodingException { - TcfCaV1 tcfCaV1 = new TcfCaV1("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAACCgBwABAAOAAoADgAJA.YAAAAAAAAAA"); + TcfCaV1 tcfCaV1 = + new TcfCaV1("BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAACCgBwABAAOAAoADgAJA.YAAAAAAAAAA"); List pubRestictions = tcfCaV1.getPubRestrictions(); Assertions.assertEquals(1, pubRestictions.size()); @@ -173,18 +192,22 @@ public void testDecode4() throws DecodingException { Assertions.assertEquals(1, pubRestictions.get(0).getType()); Assertions.assertEquals(Set.of(1, 2, 3, 5, 6, 7, 9), pubRestictions.get(0).getIds()); } - + @Test() public void testDecodeGarbage1() { - Assertions.assertThrows(DecodingException.class, () -> { - new TcfCaV1("A").getPubRestrictions(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new TcfCaV1("A").getPubRestrictions(); + }); } - + @Test() public void testDecodeGarbage2() { - Assertions.assertThrows(DecodingException.class, () -> { - new TcfCaV1("z").getPubRestrictions(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new TcfCaV1("z").getPubRestrictions(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 09f2d2a8..1abdfb65 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -1,5 +1,9 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.datatype.IntegerSet; +import com.iab.gpp.encoder.datatype.RangeEntry; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.field.TcfEuV2Field; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -8,19 +12,20 @@ import java.util.Set; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.encoder.datatype.IntegerSet; -import com.iab.gpp.encoder.datatype.RangeEntry; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.TcfEuV2Field; public class TcfEuV2Test { @Test public void testEncode1() { TcfEuV2 tcfEuV2 = new TcfEuV2(); - tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals("CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", tcfEuV2.encode()); + tcfEuV2.setFieldValue( + TcfEuV2Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfEuV2.setFieldValue( + TcfEuV2Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + Assertions.assertEquals( + "CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", tcfEuV2.encode()); TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES.toString(); } @@ -28,21 +33,25 @@ public void testEncode1() { public void testEncode2() { TcfEuV2 tcfEuV2 = new TcfEuV2(); tcfEuV2.setFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC, true); - tcfEuV2.setFieldValue(TcfEuV2Field.CREATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - tcfEuV2.setFieldValue(TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfEuV2.setFieldValue( + TcfEuV2Field.CREATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); + tcfEuV2.setFieldValue( + TcfEuV2Field.LAST_UPDATED, + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE)); + Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS)); Assertions.assertEquals( - Set.of(), - tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS)); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS)); + Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS)); Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES)); - Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS)); - Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS)); + Assertions.assertEquals( + Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS)); + Assertions.assertEquals( + Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS)); - Assertions.assertEquals("CPSG_8APSG_8AAAAAAENAACgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA", tcfEuV2.encode()); + Assertions.assertEquals( + "CPSG_8APSG_8AAAAAAENAACgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA", tcfEuV2.encode()); } @Test @@ -50,8 +59,12 @@ public void testDecode1() { TcfEuV2 tcfEuV2 = new TcfEuV2("CAAAAAAAAAAAAAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA"); Assertions.assertEquals(2, tcfEuV2.getVersion()); - Assertions.assertEquals(ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getLastUpdated()); + Assertions.assertEquals( + ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfEuV2.getCreated()); + Assertions.assertEquals( + ZonedDateTime.of(1970, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfEuV2.getLastUpdated()); Assertions.assertEquals(0, tcfEuV2.getCmpId()); Assertions.assertEquals(0, tcfEuV2.getCmpVersion()); Assertions.assertEquals(0, tcfEuV2.getConsentScreen()); @@ -60,29 +73,17 @@ public void testDecode1() { Assertions.assertEquals(2, tcfEuV2.getPolicyVersion()); Assertions.assertEquals(false, tcfEuV2.getIsServiceSpecific()); Assertions.assertEquals(false, tcfEuV2.getUseNonStandardStacks()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getSpecialFeatureOptins()); - Assertions - .assertEquals( - Set.of(), - tcfEuV2.getPurposeConsents()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getPurposeLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getSpecialFeatureOptins()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPurposeConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPurposeLegitimateInterests()); Assertions.assertEquals(false, tcfEuV2.getPurposeOneTreatment()); Assertions.assertEquals("AA", tcfEuV2.getPublisherCountryCode()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorConsents()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorLegitimateInterests()); Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherRestrictions()); Assertions.assertEquals(3, tcfEuV2.getPublisherPurposesSegmentType()); - Assertions - .assertEquals( - Set.of(), - tcfEuV2.getPublisherConsents()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getPublisherLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherLegitimateInterests()); Assertions.assertEquals(0, tcfEuV2.getNumCustomPurposes()); Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomConsents()); Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomLegitimateInterests()); @@ -99,8 +100,12 @@ public void testDecode2() { TcfEuV2 tcfEuV2 = new TcfEuV2("CPSG_8APSG_8AAAAAAENAACgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA"); Assertions.assertEquals(2, tcfEuV2.getVersion()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getCreated()); - Assertions.assertEquals(ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), tcfEuV2.getLastUpdated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfEuV2.getCreated()); + Assertions.assertEquals( + ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant(), + tcfEuV2.getLastUpdated()); Assertions.assertEquals(0, tcfEuV2.getCmpId()); Assertions.assertEquals(0, tcfEuV2.getCmpVersion()); Assertions.assertEquals(0, tcfEuV2.getConsentScreen()); @@ -109,29 +114,17 @@ public void testDecode2() { Assertions.assertEquals(2, tcfEuV2.getPolicyVersion()); Assertions.assertEquals(true, tcfEuV2.getIsServiceSpecific()); Assertions.assertEquals(false, tcfEuV2.getUseNonStandardStacks()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getSpecialFeatureOptins()); - Assertions - .assertEquals( - Set.of(), - tcfEuV2.getPurposeConsents()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getPurposeLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getSpecialFeatureOptins()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPurposeConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPurposeLegitimateInterests()); Assertions.assertEquals(false, tcfEuV2.getPurposeOneTreatment()); Assertions.assertEquals("AA", tcfEuV2.getPublisherCountryCode()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorConsents()); Assertions.assertEquals(Set.of(), tcfEuV2.getVendorLegitimateInterests()); Assertions.assertEquals(Arrays.asList(), tcfEuV2.getPublisherRestrictions()); Assertions.assertEquals(3, tcfEuV2.getPublisherPurposesSegmentType()); - Assertions - .assertEquals( - Set.of(), - tcfEuV2.getPublisherConsents()); - Assertions.assertEquals( - Set.of(), - tcfEuV2.getPublisherLegitimateInterests()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherConsents()); + Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherLegitimateInterests()); Assertions.assertEquals(0, tcfEuV2.getNumCustomPurposes()); Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomConsents()); Assertions.assertEquals(Set.of(), tcfEuV2.getPublisherCustomLegitimateInterests()); @@ -145,9 +138,9 @@ public void testDecode2() { @Test public void testDecode3() { - TcfEuV2 tcfEuV2 = new TcfEuV2( - "CPcqBNJPcqBNJNwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.QGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g.IGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g"); - + TcfEuV2 tcfEuV2 = + new TcfEuV2( + "CPcqBNJPcqBNJNwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.QGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g.IGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); Assertions.assertEquals(880, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); @@ -164,7 +157,8 @@ public void testDecode3() { Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE)); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE)); - List vendorsAllowed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED)); + List vendorsAllowed = + new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED)); Assertions.assertEquals(434, vendorsAllowed.size()); Assertions.assertEquals(1, vendorsAllowed.get(0)); Assertions.assertEquals(2, vendorsAllowed.get(1)); @@ -187,7 +181,8 @@ public void testDecode3() { Assertions.assertEquals(791, vendorsAllowed.get(vendorsAllowed.size() - 1)); Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE)); - List vendorsDisclosed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED)); + List vendorsDisclosed = + new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED)); Assertions.assertEquals(434, vendorsDisclosed.size()); Assertions.assertEquals(1, vendorsDisclosed.get(0)); Assertions.assertEquals(2, vendorsDisclosed.get(1)); @@ -211,44 +206,79 @@ public void testDecode3() { Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VERSION), tcfEuV2.getVersion()); Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CREATED), tcfEuV2.getCreated()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED), tcfEuV2.getLastUpdated()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED), tcfEuV2.getLastUpdated()); Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID), tcfEuV2.getCmpId()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION), tcfEuV2.getCmpVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN), tcfEuV2.getConsentScreen()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE), tcfEuV2.getConsentLanguage()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION), tcfEuV2.getVendorListVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION), tcfEuV2.getPolicyVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC), tcfEuV2.getIsServiceSpecific()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS), tcfEuV2.getUseNonStandardStacks()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS), tcfEuV2.getSpecialFeatureOptins()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS), tcfEuV2.getPurposeConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION), tcfEuV2.getCmpVersion()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN), tcfEuV2.getConsentScreen()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE), tcfEuV2.getConsentLanguage()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION), tcfEuV2.getVendorListVersion()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION), tcfEuV2.getPolicyVersion()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC), tcfEuV2.getIsServiceSpecific()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS), + tcfEuV2.getUseNonStandardStacks()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS), + tcfEuV2.getSpecialFeatureOptins()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS), tcfEuV2.getPurposeConsents()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS), tcfEuV2.getPurposeLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT), tcfEuV2.getPurposeOneTreatment()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE), tcfEuV2.getPublisherCountryCode()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS), tcfEuV2.getVendorConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS), tcfEuV2.getVendorLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS), tcfEuV2.getPublisherRestrictions()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT), + tcfEuV2.getPurposeOneTreatment()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE), + tcfEuV2.getPublisherCountryCode()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS), tcfEuV2.getVendorConsents()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS), + tcfEuV2.getVendorLegitimateInterests()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS), + tcfEuV2.getPublisherRestrictions()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE), tcfEuV2.getPublisherPurposesSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS), tcfEuV2.getPublisherConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS), tcfEuV2.getPublisherConsents()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS), tcfEuV2.getPublisherLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES), tcfEuV2.getNumCustomPurposes()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS), tcfEuV2.getPublisherCustomConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES), tcfEuV2.getNumCustomPurposes()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS), + tcfEuV2.getPublisherCustomConsents()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS), tcfEuV2.getPublisherCustomLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE), tcfEuV2.getVendorsAllowedSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED), tcfEuV2.getVendorsAllowed()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE), + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE), + tcfEuV2.getVendorsAllowedSegmentType()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED), tcfEuV2.getVendorsAllowed()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE), tcfEuV2.getVendorsDisclosedSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED), tcfEuV2.getVendorsDisclosed()); + Assertions.assertEquals( + tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED), tcfEuV2.getVendorsDisclosed()); } @Test public void testDecode4() { - TcfEuV2 tcfEuV2 = new TcfEuV2( - "CPi8wgAPi8wgAAOACBENCuCoAP_AAEfAACiQJHNd_H__bX9n-f7_6ft0eY1f9_r37uQzDhfNk-8F3L_W_LwX_2E7NF36tq4KmR4ku1LBIUNtHMnUDUmxaokVrzHsak2cpzNKJ_BkknsZe2dYGF9vm5tj-QKZ7_5_d3f52T_9_9v-39z33913v3d93-_13LjdV5_9H_v9fR_b8_Kf9_5-_4v8_____3_e______8AEEggCTDVuIAuxLHAm0DCKBECMKwkKoFABBQDC0QGADg4KdlYBPrCBAAgFAEYEQIcAUYEAgAAAgCQiACQIsEAAAIgEAAIAEQiEABAwCCgAsDAIAAQDQMUQoABAkIMiAiKUwICIEggJbKhBKC6Q0wgCrLACgkRsFAAiAAAUgACAsHAMESAlYsECTFG-QAjBCgFEqFaAGGgAwABBI4RABgACCRwqADAAEEjgA"); + TcfEuV2 tcfEuV2 = + new TcfEuV2( + "CPi8wgAPi8wgAAOACBENCuCoAP_AAEfAACiQJHNd_H__bX9n-f7_6ft0eY1f9_r37uQzDhfNk-8F3L_W_LwX_2E7NF36tq4KmR4ku1LBIUNtHMnUDUmxaokVrzHsak2cpzNKJ_BkknsZe2dYGF9vm5tj-QKZ7_5_d3f52T_9_9v-39z33913v3d93-_13LjdV5_9H_v9fR_b8_Kf9_5-_4v8_____3_e______8AEEggCTDVuIAuxLHAm0DCKBECMKwkKoFABBQDC0QGADg4KdlYBPrCBAAgFAEYEQIcAUYEAgAAAgCQiACQIsEAAAIgEAAIAEQiEABAwCCgAsDAIAAQDQMUQoABAkIMiAiKUwICIEggJbKhBKC6Q0wgCrLACgkRsFAAiAAAUgACAsHAMESAlYsECTFG-QAjBCgFEqFaAGGgAwABBI4RABgACCRwqADAAEEjgA"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); @@ -260,13 +290,10 @@ public void testDecode4() { Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(Set.of(1), tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions.assertEquals( - Set.of(1), - tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); - Assertions - .assertEquals( - Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); @@ -274,15 +301,18 @@ public void testDecode4() { Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(772, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); + Assertions.assertEquals( + 772, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); - Assertions.assertEquals(280, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); + Assertions.assertEquals( + 280, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); } @Test public void testDecode5() { - TcfEuV2 tcfEuV2 = new TcfEuV2( - "CPgA5EAPgA5EAAOACBENCuCoAP_AAEfAACiQI0Nd_H__bX9n-f7_6Pt0cY1f9_r3ruQzDhfFk-8F3L_W3LwX32E7NF36pq4KmR4ku1LBIQFtHMnUDUmxaokVrzHsak2cpyNKI7BkknsZe2dYGF9Pm5lD-QKZ7_5_d3f52T_9_9v-39z339V3v3d93-_12PjdV599H_v9fR_b8_Kf9_5-_4v8___4IQAAAAQQ_AJMNW4gC7EscCbQMIoAQIwrCQqAUAEFAMLRAYAODgpmVgEusIEACAUARgRAhxBRgQCAAACAJCIAJAiwQAIAiAQAAgARAIQAEDAIKACwMAgABANAxACgAECQgyICIpTAgIgSCAlsqEEoKpDTCAKssAKARGwUACIAABSAAICwcAwRICViwQJMUbwAw0AGAAIJHCIAMAAQSOFQAYAAgkcA"); + TcfEuV2 tcfEuV2 = + new TcfEuV2( + "CPgA5EAPgA5EAAOACBENCuCoAP_AAEfAACiQI0Nd_H__bX9n-f7_6Pt0cY1f9_r3ruQzDhfFk-8F3L_W3LwX32E7NF36pq4KmR4ku1LBIQFtHMnUDUmxaokVrzHsak2cpyNKI7BkknsZe2dYGF9Pm5lD-QKZ7_5_d3f52T_9_9v-39z339V3v3d93-_12PjdV599H_v9fR_b8_Kf9_5-_4v8___4IQAAAAQQ_AJMNW4gC7EscCbQMIoAQIwrCQqAUAEFAMLRAYAODgpmVgEusIEACAUARgRAhxBRgQCAAACAJCIAJAiwQAIAiAQAAgARAIQAEDAIKACwMAgABANAxACgAECQgyICIpTAgIgSCAlsqEEoKpDTCAKssAKARGwUACIAABSAAICwcAwRICViwQJMUbwAw0AGAAIJHCIAMAAQSOFQAYAAgkcA"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); @@ -294,13 +324,10 @@ public void testDecode5() { Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(Set.of(1), tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions.assertEquals( - Set.of(1), - tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); - Assertions - .assertEquals( - Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); @@ -308,14 +335,18 @@ public void testDecode5() { Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(693, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); + Assertions.assertEquals( + 693, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); - Assertions.assertEquals(254, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); + Assertions.assertEquals( + 254, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); } @Test public void testDecode6() { - TcfEuV2 tcfEuV2 = new TcfEuV2("COv_eg6Ov_eg6AOADBENAaCgAP_AAH_AACiQAVEUQQoAIQAqIoghAAQgAA.YAAAAAAAAAAAAAAAAAA"); + TcfEuV2 tcfEuV2 = + new TcfEuV2( + "COv_eg6Ov_eg6AOADBENAaCgAP_AAH_AACiQAVEUQQoAIQAqIoghAAQgAA.YAAAAAAAAAAAAAAAAAA"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); @@ -327,13 +358,10 @@ public void testDecode6() { Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions.assertEquals( - Set.of(), - tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); - Assertions - .assertEquals( - Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 3, 4, 5, 6, 7, 8, 9, 10), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); @@ -341,20 +369,25 @@ public void testDecode6() { Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 25, 37, 42), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); + Assertions.assertEquals( + Set.of(2, 6, 8, 12, 18, 23, 25, 37, 42), + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 37, 42), + Assertions.assertEquals( + Set.of(2, 6, 8, 12, 18, 23, 37, 42), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)); } - + @SuppressWarnings("unchecked") @Test public void testDecode7() throws DecodingException { TcfEuV2 tcfEuV2 = new TcfEuV2("COoC-kUOoC-kUAHABAENAwCoAIAAAELAAAwIF5wAoAAgAGAvMACX_ABBAAQAFA"); Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); - Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.CREATED).toString()); - Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED).toString()); + Assertions.assertEquals( + "2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.CREATED).toString()); + Assertions.assertEquals( + "2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED).toString()); Assertions.assertEquals(7, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); @@ -364,42 +397,45 @@ public void testDecode7() throws DecodingException { Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(Set.of(1), tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); + Assertions.assertEquals(Set.of(1), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( - Set.of(1), - tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); - Assertions.assertEquals( - Set.of(1), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); - Assertions.assertEquals( - Set.of(2, 7, 9, 10), - tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); + Set.of(2, 7, 9, 10), tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); Assertions.assertEquals("GB", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(Set.of(1, 2, 3, 755), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); + Assertions.assertEquals( + Set.of(1, 2, 3, 755), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); - Assertions.assertEquals(Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9), + Assertions.assertEquals( + Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)); - - Assertions.assertEquals(1, ((List)tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).size()); - RangeEntry rangeEntry = ((List)tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).get(0); + + Assertions.assertEquals( + 1, ((List) tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).size()); + RangeEntry rangeEntry = + ((List) tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).get(0); Assertions.assertEquals(1, rangeEntry.getKey()); Assertions.assertEquals(0, rangeEntry.getType()); Assertions.assertEquals(Set.of(10), rangeEntry.getIds()); } - + @Test() public void testDecodeGarbage1() { - Assertions.assertThrows(DecodingException.class, () -> { - new TcfEuV2("A").getCreated(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new TcfEuV2("A").getCreated(); + }); } - + @Test() public void testDecodeGarbage2() { - Assertions.assertThrows(DecodingException.class, () -> { - new TcfEuV2("z").getCreated(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new TcfEuV2("z").getCreated(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java index 6dcc3fcc..3ef79752 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsCaField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsCaTest { @@ -26,7 +25,8 @@ public void testEncode2() { usCa.setFieldValue(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, 1); usCa.setFieldValue(UsCaField.SALE_OPT_OUT, 1); usCa.setFieldValue(UsCaField.SHARING_OPT_OUT, 1); - usCa.setFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); + usCa.setFieldValue( + UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); usCa.setFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1)); usCa.setFieldValue(UsCaField.PERSONAL_DATA_CONSENTS, 1); usCa.setFieldValue(UsCaField.MSPA_COVERED_TRANSACTION, 1); @@ -46,7 +46,8 @@ public void testEncode3() { usCa.setFieldValue(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, 1); usCa.setFieldValue(UsCaField.SALE_OPT_OUT, 1); usCa.setFieldValue(UsCaField.SHARING_OPT_OUT, 1); - usCa.setFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); + usCa.setFieldValue( + UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); usCa.setFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1)); usCa.setFieldValue(UsCaField.PERSONAL_DATA_CONSENTS, 1); usCa.setFieldValue(UsCaField.MSPA_COVERED_TRANSACTION, 1); @@ -56,7 +57,7 @@ public void testEncode3() { Assertions.assertEquals("BVWSSSVY.YA", usCa.encode()); } - + @Test public void testSetInvalidValues() { UsCa usCa = new UsCa(); @@ -65,80 +66,81 @@ public void testSetInvalidValues() { usCa.setFieldValue(UsCaField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.SHARING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.SHARING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usCa.setFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 0, 0, 0, 3, 0, 0, 0, 0)); + usCa.setFieldValue( + UsCaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 0, 0, 0, 3, 0, 0, 0, 0)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.PERSONAL_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.MSPA_OPT_OUT_OPTION_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCa.setFieldValue(UsCaField.MSPA_SERVICE_PROVIDER_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } - + @Test public void testEncodeWithGpcSegmentExcluded() { @@ -156,7 +158,8 @@ public void testDecode1() { Assertions.assertEquals(1, usCa.getSensitiveDataLimitUseNotice()); Assertions.assertEquals(1, usCa.getSaleOptOut()); Assertions.assertEquals(1, usCa.getSharingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usCa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usCa.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1), usCa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usCa.getPersonalDataConsents()); Assertions.assertEquals(1, usCa.getMspaCoveredTransaction()); @@ -174,7 +177,8 @@ public void testDecodeWithGpcSegmentExcluded() { Assertions.assertEquals(1, usCa.getSensitiveDataLimitUseNotice()); Assertions.assertEquals(1, usCa.getSaleOptOut()); Assertions.assertEquals(1, usCa.getSharingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usCa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usCa.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1), usCa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usCa.getPersonalDataConsents()); Assertions.assertEquals(1, usCa.getMspaCoveredTransaction()); @@ -182,11 +186,13 @@ public void testDecodeWithGpcSegmentExcluded() { Assertions.assertEquals(2, usCa.getMspaServiceProviderMode()); Assertions.assertEquals(false, usCa.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsCa("z").getPersonalDataConsents(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsCa("z").getPersonalDataConsents(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java index 59488ff1..38d62643 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsCoField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsCoTest { @@ -34,7 +33,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSVg.YA", usCo.encode()); } - + @Test public void testSetInvalidValues() { UsCo usCo = new UsCo(); @@ -43,72 +42,71 @@ public void testSetInvalidValues() { usCo.setFieldValue(UsCoField.SHARING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.TARGETED_ADVERTISING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.MSPA_OPT_OUT_OPTION_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCo.setFieldValue(UsCoField.MSPA_SERVICE_PROVIDER_MODE, 5); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - - } + } } @Test @@ -151,11 +149,13 @@ public void testDecodeWithGpcSegmentExcluded() { Assertions.assertEquals(2, usCo.getMspaServiceProviderMode()); Assertions.assertEquals(false, usCo.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsCo("z").getTargetedAdvertisingOptOut(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsCo("z").getTargetedAdvertisingOptOut(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java index 03ea9f9b..1dd4877e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsCtField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsCtTest { @@ -34,7 +33,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSZFg.YA", usCt.encode()); } - + @Test public void testSetInvalidValues() { UsCt usCt = new UsCt(); @@ -43,70 +42,71 @@ public void testSetInvalidValues() { usCt.setFieldValue(UsCtField.SHARING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usCt.setFieldValue(UsCtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usCt.setFieldValue( + UsCtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usCt.setFieldValue(UsCtField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -126,7 +126,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usCt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usCt.getSaleOptOut()); Assertions.assertEquals(1, usCt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usCt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usCt.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usCt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usCt.getMspaCoveredTransaction()); Assertions.assertEquals(1, usCt.getMspaOptOutOptionMode()); @@ -143,18 +144,21 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usCt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usCt.getSaleOptOut()); Assertions.assertEquals(1, usCt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usCt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usCt.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usCt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usCt.getMspaCoveredTransaction()); Assertions.assertEquals(1, usCt.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usCt.getMspaServiceProviderMode()); Assertions.assertEquals(false, usCt.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsCt("z").getSharingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsCt("z").getSharingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java index 30341616..dfc6c081 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsDeField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsDeTest { @@ -25,7 +24,8 @@ public void testEncode2() { usDe.setFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usDe.setFieldValue(UsDeField.SALE_OPT_OUT, 1); usDe.setFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT, 1); - usDe.setFieldValue(UsDeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); + usDe.setFieldValue( + UsDeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0)); usDe.setFieldValue(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0, 2, 1)); usDe.setFieldValue(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); usDe.setFieldValue(UsDeField.MSPA_COVERED_TRANSACTION, 1); @@ -35,7 +35,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSSSVYA.YA", usDe.encode()); } - + @Test public void testSetInvalidValues() { UsDe usDe = new UsDe(); @@ -44,77 +44,78 @@ public void testSetInvalidValues() { usDe.setFieldValue(UsDeField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usDe.setFieldValue(UsDeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usDe.setFieldValue( + UsDeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usDe.setFieldValue(UsDeField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,8 +135,10 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usDe.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usDe.getSaleOptOut()); Assertions.assertEquals(1, usDe.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usDe.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1), usDe.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usDe.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1), usDe.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usDe.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usDe.getMspaCoveredTransaction()); Assertions.assertEquals(1, usDe.getMspaOptOutOptionMode()); @@ -152,19 +155,23 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usDe.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usDe.getSaleOptOut()); Assertions.assertEquals(1, usDe.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usDe.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1), usDe.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0), usDe.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1), usDe.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usDe.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usDe.getMspaCoveredTransaction()); Assertions.assertEquals(1, usDe.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usDe.getMspaServiceProviderMode()); Assertions.assertEquals(false, usDe.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsDe("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsDe("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java index 3882d962..fe4158ad 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsFlField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsFlTest { @@ -28,7 +27,8 @@ public void testEncode2() { usFl.setFieldValue(UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usFl.setFieldValue(UsFlField.SALE_OPT_OUT, 1); usFl.setFieldValue(UsFlField.TARGETED_ADVERTISING_OPT_OUT, 1); - usFl.setFieldValue(UsFlField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); + usFl.setFieldValue( + UsFlField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); usFl.setFieldValue(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 2)); usFl.setFieldValue(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); usFl.setFieldValue(UsFlField.MSPA_COVERED_TRANSACTION, 1); @@ -81,7 +81,8 @@ public void testSetInvalidValues() { } try { - usFl.setFieldValue(UsFlField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usFl.setFieldValue( + UsFlField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { @@ -121,7 +122,6 @@ public void testSetInvalidValues() { } catch (ValidationException e) { } - } @Test @@ -133,18 +133,21 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usFl.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usFl.getSaleOptOut()); Assertions.assertEquals(1, usFl.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usFl.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usFl.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 2), usFl.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usFl.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usFl.getMspaCoveredTransaction()); Assertions.assertEquals(1, usFl.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usFl.getMspaServiceProviderMode()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsFl("z").getMspaCoveredTransaction(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsFl("z").getMspaCoveredTransaction(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java index 4171eac1..6bd6b053 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsIaField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsIaTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVVkklWA.YA", usIa.encode()); } - + @Test public void testSetInvalidValues() { UsIa usIa = new UsIa(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usIa.setFieldValue(UsIaField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usIa.setFieldValue(UsIaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usIa.setFieldValue( + UsIaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usIa.setFieldValue(UsIaField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -135,7 +135,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usIa.getSensitiveDataOptOutNotice()); Assertions.assertEquals(1, usIa.getSaleOptOut()); Assertions.assertEquals(1, usIa.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usIa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usIa.getSensitiveDataProcessing()); Assertions.assertEquals(1, usIa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usIa.getMspaCoveredTransaction()); Assertions.assertEquals(1, usIa.getMspaOptOutOptionMode()); @@ -153,18 +154,21 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usIa.getSensitiveDataOptOutNotice()); Assertions.assertEquals(1, usIa.getSaleOptOut()); Assertions.assertEquals(1, usIa.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usIa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usIa.getSensitiveDataProcessing()); Assertions.assertEquals(1, usIa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usIa.getMspaCoveredTransaction()); Assertions.assertEquals(1, usIa.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usIa.getMspaServiceProviderMode()); Assertions.assertEquals(false, usIa.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsIa("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsIa("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java index aaceb049..8e951bd1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsMtField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsMtTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSZFY.YA", usMt.encode()); } - + @Test public void testSetInvalidValues() { UsMt usMt = new UsMt(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usMt.setFieldValue(UsMtField.SHARING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usMt.setFieldValue(UsMtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usMt.setFieldValue( + UsMtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usMt.setFieldValue(UsMtField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usMt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usMt.getSaleOptOut()); Assertions.assertEquals(1, usMt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMt.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usMt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usMt.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usMt.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usMt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usMt.getSaleOptOut()); Assertions.assertEquals(1, usMt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMt.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usMt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usMt.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usMt.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usMt.getMspaServiceProviderMode()); Assertions.assertEquals(false, usMt.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsMt("z").getSharingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsMt("z").getSharingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java index 67029545..ec549ad4 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsNatField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsNatTest { @@ -30,7 +29,9 @@ public void testEncode2() { usNat.setFieldValue(UsNatField.SALE_OPT_OUT, 1); usNat.setFieldValue(UsNatField.SHARING_OPT_OUT, 1); usNat.setFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT, 1); - usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2)); + usNat.setFieldValue( + UsNatField.SENSITIVE_DATA_PROCESSING, + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2)); usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0)); usNat.setFieldValue(UsNatField.PERSONAL_DATA_CONSENTS, 1); usNat.setFieldValue(UsNatField.MSPA_COVERED_TRANSACTION, 1); @@ -40,7 +41,7 @@ public void testEncode2() { Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode()); } - + @Test public void testSetInvalidValues() { UsNat usNat = new UsNat(); @@ -49,108 +50,107 @@ public void testSetInvalidValues() { usNat.setFieldValue(UsNatField.SHARING_NOTICE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SHARING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.SHARING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 0, 0, 1, 2, 0)); + usNat.setFieldValue( + UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 0, 0, 1, 2, 0)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(0, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.PERSONAL_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.MSPA_OPT_OUT_OPTION_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - - } @Test @@ -166,7 +166,9 @@ public void testEncode3() { usNat.setFieldValue(UsNatField.SALE_OPT_OUT, 1); usNat.setFieldValue(UsNatField.SHARING_OPT_OUT, 1); usNat.setFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT, 1); - usNat.setFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2)); + usNat.setFieldValue( + UsNatField.SENSITIVE_DATA_PROCESSING, + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2)); usNat.setFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0)); usNat.setFieldValue(UsNatField.PERSONAL_DATA_CONSENTS, 1); usNat.setFieldValue(UsNatField.MSPA_COVERED_TRANSACTION, 1); @@ -198,7 +200,9 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usNat.getSaleOptOut()); Assertions.assertEquals(1, usNat.getSharingOptOut()); Assertions.assertEquals(1, usNat.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2), usNat.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2), + usNat.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usNat.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNat.getPersonalDataConsents()); Assertions.assertEquals(1, usNat.getMspaCoveredTransaction()); @@ -220,7 +224,9 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usNat.getSaleOptOut()); Assertions.assertEquals(1, usNat.getSharingOptOut()); Assertions.assertEquals(1, usNat.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2), usNat.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2), + usNat.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usNat.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNat.getPersonalDataConsents()); Assertions.assertEquals(1, usNat.getMspaCoveredTransaction()); @@ -228,11 +234,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usNat.getMspaServiceProviderMode()); Assertions.assertEquals(false, usNat.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsNat("z").getSharingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsNat("z").getSharingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java index e9e25743..10b6e816 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsNeField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsNeTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSVWA.YA", usNe.encode()); } - + @Test public void testSetInvalidValues() { UsNe usNe = new UsNe(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usNe.setFieldValue(UsNeField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usNe.setFieldValue(UsNeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usNe.setFieldValue( + UsNeField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNe.setFieldValue(UsNeField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usNe.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNe.getSaleOptOut()); Assertions.assertEquals(1, usNe.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNe.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNe.getSensitiveDataProcessing()); Assertions.assertEquals(1, usNe.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNe.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNe.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usNe.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNe.getSaleOptOut()); Assertions.assertEquals(1, usNe.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNe.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNe.getSensitiveDataProcessing()); Assertions.assertEquals(1, usNe.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNe.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNe.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usNe.getMspaServiceProviderMode()); Assertions.assertEquals(false, usNe.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsNe("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsNe("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java index 3211f9fc..805166c3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsNhField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsNhTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSZFY.YA", usNh.encode()); } - + @Test public void testSetInvalidValues() { UsNh usNh = new UsNh(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usNh.setFieldValue(UsNhField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usNh.setFieldValue(UsNhField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usNh.setFieldValue( + UsNhField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNh.setFieldValue(UsNhField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usNh.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNh.getSaleOptOut()); Assertions.assertEquals(1, usNh.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNh.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNh.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usNh.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNh.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNh.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usNh.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNh.getSaleOptOut()); Assertions.assertEquals(1, usNh.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNh.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usNh.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usNh.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNh.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNh.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usNh.getMspaServiceProviderMode()); Assertions.assertEquals(false, usNh.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsNh("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsNh("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java index afda60bb..b32b0cee 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsNjField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsNjTest { @@ -25,7 +24,8 @@ public void testEncode2() { usNj.setFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usNj.setFieldValue(UsNjField.SALE_OPT_OUT, 1); usNj.setFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT, 1); - usNj.setFieldValue(UsNjField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1)); + usNj.setFieldValue( + UsNjField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1)); usNj.setFieldValue(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0, 2, 1)); usNj.setFieldValue(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); usNj.setFieldValue(UsNjField.MSPA_COVERED_TRANSACTION, 1); @@ -35,7 +35,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSRklWA.YA", usNj.encode()); } - + @Test public void testSetInvalidValues() { UsNj usNj = new UsNj(); @@ -44,77 +44,78 @@ public void testSetInvalidValues() { usNj.setFieldValue(UsNjField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usNj.setFieldValue(UsNjField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usNj.setFieldValue( + UsNjField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usNj.setFieldValue(UsNjField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,8 +135,10 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usNj.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNj.getSaleOptOut()); Assertions.assertEquals(1, usNj.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1), usNj.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1), usNj.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1), usNj.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1), usNj.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNj.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNj.getMspaCoveredTransaction()); Assertions.assertEquals(1, usNj.getMspaOptOutOptionMode()); @@ -152,19 +155,23 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usNj.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usNj.getSaleOptOut()); Assertions.assertEquals(1, usNj.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1), usNj.getSensitiveDataProcessing()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1), usNj.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1), usNj.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1), usNj.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usNj.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usNj.getMspaCoveredTransaction()); Assertions.assertEquals(1, usNj.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usNj.getMspaServiceProviderMode()); Assertions.assertEquals(false, usNj.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsNj("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsNj("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java index 34c310b5..3a78e62c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsOrField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsOrTest { @@ -25,7 +24,8 @@ public void testEncode2() { usOr.setFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usOr.setFieldValue(UsOrField.SALE_OPT_OUT, 1); usOr.setFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT, 1); - usOr.setFieldValue(UsOrField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2)); + usOr.setFieldValue( + UsOrField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2)); usOr.setFieldValue(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(2, 1, 0)); usOr.setFieldValue(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); usOr.setFieldValue(UsOrField.MSPA_COVERED_TRANSACTION, 1); @@ -35,7 +35,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSRpFYA.YA", usOr.encode()); } - + @Test public void testSetInvalidValues() { UsOr usOr = new UsOr(); @@ -44,77 +44,78 @@ public void testSetInvalidValues() { usOr.setFieldValue(UsOrField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usOr.setFieldValue(UsOrField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usOr.setFieldValue( + UsOrField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, Arrays.asList(1, 2, 3)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usOr.setFieldValue(UsOrField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +135,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usOr.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usOr.getSaleOptOut()); Assertions.assertEquals(1, usOr.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2), usOr.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2), usOr.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usOr.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usOr.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usOr.getMspaCoveredTransaction()); @@ -152,7 +154,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usOr.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usOr.getSaleOptOut()); Assertions.assertEquals(1, usOr.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2), usOr.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1, 0, 1, 2), usOr.getSensitiveDataProcessing()); Assertions.assertEquals(Arrays.asList(2, 1, 0), usOr.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usOr.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usOr.getMspaCoveredTransaction()); @@ -160,11 +163,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usOr.getMspaServiceProviderMode()); Assertions.assertEquals(false, usOr.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsOr("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsOr("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java index 8d0cae7d..79aa5ff1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsTnField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsTnTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSVWA.YA", usTn.encode()); } - + @Test public void testSetInvalidValues() { UsTn usTn = new UsTn(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usTn.setFieldValue(UsTnField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usTn.setFieldValue(UsTnField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usTn.setFieldValue( + UsTnField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTn.setFieldValue(UsTnField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usTn.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usTn.getSaleOptOut()); Assertions.assertEquals(1, usTn.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTn.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTn.getSensitiveDataProcessing()); Assertions.assertEquals(1, usTn.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usTn.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usTn.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usTn.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usTn.getSaleOptOut()); Assertions.assertEquals(1, usTn.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTn.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTn.getSensitiveDataProcessing()); Assertions.assertEquals(1, usTn.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usTn.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usTn.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usTn.getMspaServiceProviderMode()); Assertions.assertEquals(false, usTn.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsTn("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsTn("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java index 4609feed..28a4ef45 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsTxField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsTxTest { @@ -35,7 +34,7 @@ public void testEncode2() { Assertions.assertEquals("BVWSSVWA.YA", usTx.encode()); } - + @Test public void testSetInvalidValues() { UsTx usTx = new UsTx(); @@ -44,77 +43,78 @@ public void testSetInvalidValues() { usTx.setFieldValue(UsTxField.PROCESSING_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.SALE_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.TARGETED_ADVERTISING_OPT_OUT, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usTx.setFieldValue(UsTxField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usTx.setFieldValue( + UsTxField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.MSPA_OPT_OUT_OPTION_MODE, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usTx.setFieldValue(UsTxField.MSPA_SERVICE_PROVIDER_MODE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } } @@ -134,7 +134,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usTx.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usTx.getSaleOptOut()); Assertions.assertEquals(1, usTx.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTx.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTx.getSensitiveDataProcessing()); Assertions.assertEquals(1, usTx.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usTx.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usTx.getMspaCoveredTransaction()); @@ -152,7 +153,8 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(1, usTx.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usTx.getSaleOptOut()); Assertions.assertEquals(1, usTx.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTx.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usTx.getSensitiveDataProcessing()); Assertions.assertEquals(1, usTx.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usTx.getAdditionalDataProcessingConsent()); Assertions.assertEquals(1, usTx.getMspaCoveredTransaction()); @@ -160,11 +162,13 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(2, usTx.getMspaServiceProviderMode()); Assertions.assertEquals(false, usTx.getGpcSegmentIncluded()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsTx("z").getProcessingNotice(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsTx("z").getProcessingNotice(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java index f95b88f0..3ad6dc06 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java @@ -1,12 +1,11 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsUtField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsUtTest { @@ -34,7 +33,7 @@ public void testEncode2() { Assertions.assertEquals("BVVkklWA", usUt.encode()); } - + @Test public void testSetInvalidValues() { UsUt usUt = new UsUt(); @@ -43,79 +42,79 @@ public void testSetInvalidValues() { usUt.setFieldValue(UsUtField.SHARING_NOTICE, -1); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.SALE_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.SALE_OPT_OUT, 4); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.TARGETED_ADVERTISING_OPT_OUT, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { - usUt.setFieldValue(UsUtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 0)); + usUt.setFieldValue( + UsUtField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 0, 1, 2, 0)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.MSPA_COVERED_TRANSACTION, 0); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.MSPA_OPT_OUT_OPTION_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - + try { usUt.setFieldValue(UsUtField.MSPA_SERVICE_PROVIDER_MODE, 3); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { - + } - } @Test @@ -127,17 +126,20 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usUt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usUt.getSaleOptOut()); Assertions.assertEquals(1, usUt.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usUt.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usUt.getSensitiveDataProcessing()); Assertions.assertEquals(1, usUt.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usUt.getMspaCoveredTransaction()); Assertions.assertEquals(1, usUt.getMspaOptOutOptionMode()); Assertions.assertEquals(2, usUt.getMspaServiceProviderMode()); } - + @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsUt("z").getKnownChildSensitiveDataConsents(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsUt("z").getKnownChildSensitiveDataConsents(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java index 346e0ca6..06025a47 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java @@ -1,14 +1,13 @@ package com.iab.gpp.encoder.section; - -import java.util.Arrays; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.error.ValidationException; import com.iab.gpp.encoder.field.UsVaField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UsVaTest { @@ -28,7 +27,8 @@ public void testEncode2() { usVa.setFieldValue(UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); usVa.setFieldValue(UsVaField.SALE_OPT_OUT, 1); usVa.setFieldValue(UsVaField.TARGETED_ADVERTISING_OPT_OUT, 1); - usVa.setFieldValue(UsVaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); + usVa.setFieldValue( + UsVaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); usVa.setFieldValue(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 1); usVa.setFieldValue(UsVaField.MSPA_COVERED_TRANSACTION, 1); usVa.setFieldValue(UsVaField.MSPA_OPT_OUT_OPTION_MODE, 1); @@ -80,7 +80,8 @@ public void testSetInvalidValues() { } try { - usVa.setFieldValue(UsVaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + usVa.setFieldValue( + UsVaField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); Assertions.fail("Expected ValidationException"); } catch (ValidationException e) { @@ -113,7 +114,6 @@ public void testSetInvalidValues() { } catch (ValidationException e) { } - } @Test @@ -125,7 +125,8 @@ public void testDecode1() throws DecodingException { Assertions.assertEquals(1, usVa.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usVa.getSaleOptOut()); Assertions.assertEquals(1, usVa.getTargetedAdvertisingOptOut()); - Assertions.assertEquals(Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usVa.getSensitiveDataProcessing()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usVa.getSensitiveDataProcessing()); Assertions.assertEquals(1, usVa.getKnownChildSensitiveDataConsents()); Assertions.assertEquals(1, usVa.getMspaCoveredTransaction()); Assertions.assertEquals(1, usVa.getMspaOptOutOptionMode()); @@ -134,8 +135,10 @@ public void testDecode1() throws DecodingException { @Test() public void testDecodeGarbage() { - Assertions.assertThrows(DecodingException.class, () -> { - new UsVa("z").getMspaCoveredTransaction(); - }); + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsVa("z").getMspaCoveredTransaction(); + }); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java index 126b9b57..9c810f08 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java @@ -1,10 +1,10 @@ package com.iab.gpp.encoder.section; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.UspV1Field; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class UspV1Test { @@ -62,5 +62,4 @@ public void testDecode2() throws DecodingException, InvalidFieldException { Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE), uspv1.getOptOutSale()); Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.LSPA_COVERED), uspv1.getLspaCovered()); } - } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java index 158ced93..024b07f4 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/Loader.java @@ -20,8 +20,6 @@ * #L% */ -import java.io.IOException; -import java.io.InputStream; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver; @@ -40,6 +38,8 @@ import com.iab.gpp.extras.jackson.gvl.Stack; import com.iab.gpp.extras.jackson.gvl.Vendor; import com.iab.gpp.extras.jackson.gvl.VendorUrl; +import java.io.IOException; +import java.io.InputStream; public class Loader { private ObjectMapper objectMapper = new ObjectMapper(); diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java index eefc3bd3..963795b4 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/cmp/Cmp.java @@ -21,7 +21,6 @@ */ import com.fasterxml.jackson.annotation.JsonProperty; - import java.time.Instant; import java.util.Optional; @@ -35,7 +34,6 @@ public class Cmp implements com.iab.gpp.extras.cmp.Cmp { private Instant deletedDate; - /** * A CMP id: a numeric ID which is incrementally assigned and never re-used – inactive CMPs are * marked as deleted @@ -84,6 +82,8 @@ public Optional getDeletedDate() { */ @Override public boolean isDeleted() { - return Optional.ofNullable(this.deletedDate).map(deleteDate -> !deleteDate.isAfter(Instant.now())).orElse(false); + return Optional.ofNullable(this.deletedDate) + .map(deleteDate -> !deleteDate.isAfter(Instant.now())) + .orElse(false); } } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java index 375c5aea..d207ed2b 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/DataCategory.java @@ -58,6 +58,4 @@ public String getName() { public String getDescription() { return description; } - - } diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java index 2cbcdcc8..917a4fa2 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Gvl.java @@ -20,12 +20,6 @@ * #L% */ - -import java.time.Instant; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Optional; import com.iab.gpp.extras.gvl.DataCategory; import com.iab.gpp.extras.gvl.Feature; import com.iab.gpp.extras.gvl.Purpose; @@ -33,6 +27,11 @@ import com.iab.gpp.extras.gvl.SpecialPurpose; import com.iab.gpp.extras.gvl.Stack; import com.iab.gpp.extras.gvl.Vendor; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; public class Gvl implements com.iab.gpp.extras.gvl.Gvl { @@ -69,13 +68,13 @@ public int getVendorListVersion() { } /** - * A TCF Policy Version. The TCF MO will increment this value whenever a GVL change (such as adding - * a new Purpose or Feature or a change in Purpose wording) legally invalidates existing TC Strings - * and requires CMPs to re-establish transparency and consent from users. TCF Policy changes should - * be relatively infrequent and only occur when necessary to support changes in global mandate. If - * the policy version number in the latest GVL is different from the value in your TC String, then - * you need to re-establish transparency and consent for that user. A version 1 format TC String is - * considered to have a version value of 1. + * A TCF Policy Version. The TCF MO will increment this value whenever a GVL change (such as + * adding a new Purpose or Feature or a change in Purpose wording) legally invalidates existing TC + * Strings and requires CMPs to re-establish transparency and consent from users. TCF Policy + * changes should be relatively infrequent and only occur when necessary to support changes in + * global mandate. If the policy version number in the latest GVL is different from the value in + * your TC String, then you need to re-establish transparency and consent for that user. A version + * 1 format TC String is considered to have a version value of 1. * * @return tcf policy version */ diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java index d837da26..35e5aa4b 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Overflow.java @@ -20,7 +20,6 @@ * #L% */ - public class Overflow implements com.iab.gpp.extras.gvl.Overflow { private int httpGetLimit; diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java index 12919c57..5504f6af 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Purpose.java @@ -23,9 +23,7 @@ * #L% */ -/** - * A standard purpose - */ +/** A standard purpose */ public class Purpose implements com.iab.gpp.extras.gvl.Purpose { private int id; @@ -87,8 +85,8 @@ public Optional> getIllustrations() { } /** - * An optional flag where false means CMPs should never afford users the means to provide an opt-in - * consent choice + * An optional flag where false means CMPs should never afford users the means to provide an + * opt-in consent choice * * @return consentable boolean */ diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialFeature.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialFeature.java index f3e88141..0b70ffb6 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialFeature.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialFeature.java @@ -25,6 +25,4 @@ * signal an opt-in choice as to whether vendors may employ the feature when performing any purpose * processing. See Policies for specifics. */ -public class SpecialFeature extends Feature implements com.iab.gpp.extras.gvl.SpecialFeature { - -} +public class SpecialFeature extends Feature implements com.iab.gpp.extras.gvl.SpecialFeature {} diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialPurpose.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialPurpose.java index f42f0617..09c7efba 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialPurpose.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/SpecialPurpose.java @@ -20,9 +20,5 @@ * #L% */ -/** - * A special purpose declared as performed on the legal basis of a legitimate interest - */ -public class SpecialPurpose extends Purpose implements com.iab.gpp.extras.gvl.SpecialPurpose { - -} +/** A special purpose declared as performed on the legal basis of a legitimate interest */ +public class SpecialPurpose extends Purpose implements com.iab.gpp.extras.gvl.SpecialPurpose {} diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java index de55cfee..30634ec1 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/Vendor.java @@ -20,12 +20,12 @@ * #L% */ -import java.time.Instant; -import java.util.List; -import java.util.Optional; import com.iab.gpp.extras.gvl.DataRetention; import com.iab.gpp.extras.gvl.Overflow; import com.iab.gpp.extras.gvl.VendorUrl; +import java.time.Instant; +import java.util.List; +import java.util.Optional; public class Vendor implements com.iab.gpp.extras.gvl.Vendor { @@ -51,8 +51,8 @@ public class Vendor implements com.iab.gpp.extras.gvl.Vendor { private List dataDeclaration; /** - * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors are - * just marked as deleted + * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors + * are just marked as deleted * * @return vendor id */ @@ -82,8 +82,8 @@ public List getPurposes() { } /** - * List of Purposes for which the vendor requires to be transparently disclosed as their legitimate - * interest + * List of Purposes for which the vendor requires to be transparently disclosed as their + * legitimate interest * * @return A {@link List} of purpose ids disclosed as legitimate interests */ @@ -104,8 +104,8 @@ public Optional> getImpConsPurposes() { /** * List of purposes where the vendor is flexible regarding the legal basis; they will perform the - * processing based on consent or a legitimate interest. The 'default' is determined by which of the - * other two mutually-exclusive purpose fields is used to declare the purpose for the vendor + * processing based on consent or a legitimate interest. The 'default' is determined by which of + * the other two mutually-exclusive purpose fields is used to declare the purpose for the vendor * * @return A {@link List} of flexible purpose ids */ @@ -167,7 +167,8 @@ public Optional getDeletedDate() { /** * object specifying the vendor's http GET request length limit. It is optional. If a vendor entry - * does not include this attribute then the vendor has no overflow options and none can be inferred. + * does not include this attribute then the vendor has no overflow options and none can be + * inferred. * * @return A {@link com.iab.gpp.extras.gvl.Overflow} object */ @@ -183,14 +184,17 @@ public Optional getOverflow() { */ @Override public boolean isDeleted() { - return Optional.ofNullable(this.deletedDate).map(deletedDate -> !deletedDate.isAfter(Instant.now())).orElse(false); + return Optional.ofNullable(this.deletedDate) + .map(deletedDate -> !deletedDate.isAfter(Instant.now())) + .orElse(false); } /** - * The number of seconds representing the longest potential duration for cookie storage on a device. + * The number of seconds representing the longest potential duration for cookie storage on a + * device. * - * @return The number, in seconds, of the longest potential duration for storage on a device, as set - * when using the cookie method of storage. + * @return The number, in seconds, of the longest potential duration for storage on a device, as + * set when using the cookie method of storage. */ @Override public Optional getCookieMaxAgeSeconds() { @@ -242,7 +246,7 @@ public Optional getDeviceStorageDisclosureUrl() { /** * dataRetention - * + * * @return dataRetention */ public Optional getDataRetention() { @@ -251,7 +255,7 @@ public Optional getDataRetention() { /** * urls - * + * * @return urls */ public Optional> getUrls() { @@ -260,7 +264,7 @@ public Optional> getUrls() { /** * dataDeclarations - * + * * @return dataDeclarations */ public Optional> getDataDeclaration() { diff --git a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java index cf4d3b86..c42a3266 100644 --- a/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java +++ b/iabgpp-extras-jackson/src/main/java/com/iab/gpp/extras/jackson/gvl/VendorUrl.java @@ -60,5 +60,4 @@ public String getPrivacy() { public Optional getLegIntClaim() { return Optional.ofNullable(legIntClaim); } - } diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java index 673ad24f..c23cbb84 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/cmp/CmpListTest.java @@ -1,11 +1,13 @@ package com.iab.gpp.extras.jackson.cmp; +import com.iab.gpp.extras.cmp.Cmp; +import com.iab.gpp.extras.cmp.CmpList; +import com.iab.gpp.extras.jackson.Loader; import java.io.IOException; import java.time.Instant; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.cmp.Cmp; /*- * #%L @@ -27,9 +29,6 @@ * #L% */ -import com.iab.gpp.extras.cmp.CmpList; -import com.iab.gpp.extras.jackson.Loader; - public class CmpListTest { private static CmpList cmpList; @@ -38,9 +37,12 @@ public class CmpListTest { @BeforeAll public static void setUpBeforeClass() throws IOException { - cmpList = new Loader().cmpList(CmpListTest.class.getClassLoader().getResourceAsStream("cmpList.json")); + cmpList = + new Loader() + .cmpList(CmpListTest.class.getClassLoader().getResourceAsStream("cmpList.json")); cmpThree = cmpList.getCmps().stream().filter(o -> o.getId() == 3).findFirst().orElse(null); - cmpTwentyThree = cmpList.getCmps().stream().filter(o -> o.getId() == 23).findFirst().orElse(null); + cmpTwentyThree = + cmpList.getCmps().stream().filter(o -> o.getId() == 23).findFirst().orElse(null); } @Test diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlCanadaTest.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlCanadaTest.java index 8f665014..27b024ca 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlCanadaTest.java +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlCanadaTest.java @@ -2,103 +2,118 @@ import com.iab.gpp.extras.gvl.Gvl; import com.iab.gpp.extras.jackson.Loader; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - import java.io.IOException; import java.util.Arrays; import java.util.Collections; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; public class GvlCanadaTest { - @Test - public void test() throws IOException { - Gvl gvl = new Loader() - .globalVendorList(GvlV2Test.class.getClassLoader().getResourceAsStream("vendorlist/v2/ca/vendor-list.json")); - Assertions.assertFalse(gvl.getDataCategories().isPresent()); - Assertions.assertEquals(3, gvl.getFeatures().size()); - Assertions.assertEquals(2, gvl.getGvlSpecificationVersion()); - Assertions.assertNotNull(gvl.getLastUpdated()); - Assertions.assertEquals(10, gvl.getPurposes().size()); - Assertions.assertEquals(2, gvl.getSpecialFeatures().size()); - Assertions.assertEquals(2, gvl.getSpecialPurposes().size()); - Assertions.assertEquals(42, gvl.getStacks().size()); - Assertions.assertEquals(2, gvl.getTcfPolicyVersion()); - Assertions.assertEquals(45, gvl.getVendorListVersion()); - Assertions.assertEquals(36, gvl.getVendors().size()); + @Test + public void test() throws IOException { + Gvl gvl = + new Loader() + .globalVendorList( + GvlV2Test.class + .getClassLoader() + .getResourceAsStream("vendorlist/v2/ca/vendor-list.json")); + Assertions.assertFalse(gvl.getDataCategories().isPresent()); + Assertions.assertEquals(3, gvl.getFeatures().size()); + Assertions.assertEquals(2, gvl.getGvlSpecificationVersion()); + Assertions.assertNotNull(gvl.getLastUpdated()); + Assertions.assertEquals(10, gvl.getPurposes().size()); + Assertions.assertEquals(2, gvl.getSpecialFeatures().size()); + Assertions.assertEquals(2, gvl.getSpecialPurposes().size()); + Assertions.assertEquals(42, gvl.getStacks().size()); + Assertions.assertEquals(2, gvl.getTcfPolicyVersion()); + Assertions.assertEquals(45, gvl.getVendorListVersion()); + Assertions.assertEquals(36, gvl.getVendors().size()); - Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); - Assertions.assertEquals("Store and/or access information on a device", gvl.getPurposes().get(0).getName()); - Assertions.assertEquals( - "Cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you.", - gvl.getPurposes().get(0).getDescription()); - Assertions.assertTrue(gvl.getPurposes().get(0).getDescriptionLegal().isPresent()); - Assertions.assertEquals( - "Vendors can:\n* Store and access information on the device such as cookies and device identifiers presented to a user.", - gvl.getPurposes().get(0).getDescriptionLegal().get()); - Assertions.assertFalse(gvl.getPurposes().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); + Assertions.assertEquals( + "Store and/or access information on a device", gvl.getPurposes().get(0).getName()); + Assertions.assertEquals( + "Cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you.", + gvl.getPurposes().get(0).getDescription()); + Assertions.assertTrue(gvl.getPurposes().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "Vendors can:\n* Store and access information on the device such as cookies and device identifiers presented to a user.", + gvl.getPurposes().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getPurposes().get(0).getIllustrations().isPresent()); - Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); - Assertions.assertEquals("Ensure security, prevent fraud, and debug", gvl.getSpecialPurposes().get(0).getName()); - Assertions.assertEquals( - "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.", - gvl.getSpecialPurposes().get(0).getDescription()); - Assertions.assertTrue(gvl.getSpecialPurposes().get(0).getDescriptionLegal().isPresent()); - Assertions.assertEquals( - "To ensure security, prevent fraud and debug vendors can:\n* Ensure data are securely transmitted\n* Detect and prevent malicious, fraudulent, invalid, or illegal activity.\n* Ensure correct and efficient operation of systems and processes, including to monitor and enhance the performance of systems and processes engaged in permitted purposes\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose.\nNote: Data collected and used to ensure security, prevent fraud, and debug may include automatically-sent device characteristics for identification, precise geolocation data, and data obtained by actively scanning device characteristics for identification without separate disclosure and/or opt-in.", - gvl.getSpecialPurposes().get(0).getDescriptionLegal().get()); - Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); + Assertions.assertEquals( + "Ensure security, prevent fraud, and debug", gvl.getSpecialPurposes().get(0).getName()); + Assertions.assertEquals( + "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.", + gvl.getSpecialPurposes().get(0).getDescription()); + Assertions.assertTrue(gvl.getSpecialPurposes().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "To ensure security, prevent fraud and debug vendors can:\n* Ensure data are securely transmitted\n* Detect and prevent malicious, fraudulent, invalid, or illegal activity.\n* Ensure correct and efficient operation of systems and processes, including to monitor and enhance the performance of systems and processes engaged in permitted purposes\nVendors cannot:\n* Conduct any other data processing operation allowed under a different purpose under this purpose.\nNote: Data collected and used to ensure security, prevent fraud, and debug may include automatically-sent device characteristics for identification, precise geolocation data, and data obtained by actively scanning device characteristics for identification without separate disclosure and/or opt-in.", + gvl.getSpecialPurposes().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); - Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); - Assertions.assertEquals("Match and combine offline data sources", gvl.getFeatures().get(0).getName()); - Assertions.assertEquals( - "Data from offline data sources can be combined with your online activity in support of one or more purposes", - gvl.getFeatures().get(0).getDescription()); - Assertions.assertTrue(gvl.getFeatures().get(0).getDescriptionLegal().isPresent()); - Assertions.assertEquals( - "Vendors can:\n* Combine data obtained offline with data collected online in support of one or more Purposes or Special Purposes.", - gvl.getFeatures().get(0).getDescriptionLegal().get()); - Assertions.assertFalse(gvl.getFeatures().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); + Assertions.assertEquals( + "Match and combine offline data sources", gvl.getFeatures().get(0).getName()); + Assertions.assertEquals( + "Data from offline data sources can be combined with your online activity in support of one or more purposes", + gvl.getFeatures().get(0).getDescription()); + Assertions.assertTrue(gvl.getFeatures().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "Vendors can:\n* Combine data obtained offline with data collected online in support of one or more Purposes or Special Purposes.", + gvl.getFeatures().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getFeatures().get(0).getIllustrations().isPresent()); - Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); - Assertions.assertEquals("Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); - Assertions.assertEquals( - "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.", - gvl.getSpecialFeatures().get(0).getDescription()); - Assertions.assertTrue(gvl.getSpecialFeatures().get(0).getDescriptionLegal().isPresent()); - Assertions.assertEquals( - "Vendors can:\n* Collect and process precise geolocation data in support of one or more purposes.\nN.B. Precise geolocation means that there are no restrictions on the precision of a user’s location; this can be accurate to within several meters.", - gvl.getSpecialFeatures().get(0).getDescriptionLegal().get()); - Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); + Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); + Assertions.assertEquals( + "Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); + Assertions.assertEquals( + "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.", + gvl.getSpecialFeatures().get(0).getDescription()); + Assertions.assertTrue(gvl.getSpecialFeatures().get(0).getDescriptionLegal().isPresent()); + Assertions.assertEquals( + "Vendors can:\n* Collect and process precise geolocation data in support of one or more purposes.\nN.B. Precise geolocation means that there are no restrictions on the precision of a user’s location; this can be accurate to within several meters.", + gvl.getSpecialFeatures().get(0).getDescriptionLegal().get()); + Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); - Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); - Assertions.assertEquals("Precise geolocation data, and identification through device scanning", gvl.getStacks().get(0).getName()); - Assertions.assertEquals("Precise geolocation and information about device characteristics can be used.", gvl.getStacks().get(0).getDescription()); - Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); + Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); + Assertions.assertEquals( + "Precise geolocation data, and identification through device scanning", + gvl.getStacks().get(0).getName()); + Assertions.assertEquals( + "Precise geolocation and information about device characteristics can be used.", + gvl.getStacks().get(0).getDescription()); + Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); - Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); - Assertions.assertEquals("Basic ads, and ad measurement", gvl.getStacks().get(1).getName()); - Assertions.assertEquals("Basic ads can be served. Ad performance can be measured.", gvl.getStacks().get(1).getDescription()); - Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); - Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); + Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); + Assertions.assertEquals("Basic ads, and ad measurement", gvl.getStacks().get(1).getName()); + Assertions.assertEquals( + "Basic ads can be served. Ad performance can be measured.", + gvl.getStacks().get(1).getDescription()); + Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); + Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); - Assertions.assertEquals(10, gvl.getVendors().get(0).getId()); - Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); - Assertions.assertEquals("Index Exchange Inc. ", gvl.getVendors().get(0).getName()); - Assertions.assertEquals(Arrays.asList(2, 7), gvl.getVendors().get(0).getPurposes()); - Assertions.assertFalse(gvl.getVendors().get(0).getLegIntPurposes().isPresent()); - Assertions.assertTrue(gvl.getVendors().get(0).getImpConsPurposes().isPresent()); - Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(0).getImpConsPurposes().get()); - Assertions.assertEquals(Arrays.asList(2, 7), gvl.getVendors().get(0).getFlexiblePurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); - Assertions.assertEquals(Collections.singletonList(3), gvl.getVendors().get(0).getFeatures()); - Assertions.assertEquals(Collections.singletonList(1), gvl.getVendors().get(0).getSpecialFeatures()); - Assertions.assertTrue(gvl.getVendors().get(0).getUrls().isPresent()); - Assertions.assertEquals("https://www.indexexchange.com/privacy/", - gvl.getVendors().get(0).getUrls().get().get(0).getPrivacy()); - Assertions.assertEquals("en", - gvl.getVendors().get(0).getUrls().get().get(0).getLangId()); - Assertions.assertEquals(52, gvl.getVendors().get(1).getId()); - Assertions.assertFalse(gvl.getVendors().get(1).getDeletedDate().isPresent()); - } + Assertions.assertEquals(10, gvl.getVendors().get(0).getId()); + Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); + Assertions.assertEquals("Index Exchange Inc. ", gvl.getVendors().get(0).getName()); + Assertions.assertEquals(Arrays.asList(2, 7), gvl.getVendors().get(0).getPurposes()); + Assertions.assertFalse(gvl.getVendors().get(0).getLegIntPurposes().isPresent()); + Assertions.assertTrue(gvl.getVendors().get(0).getImpConsPurposes().isPresent()); + Assertions.assertEquals( + Collections.emptyList(), gvl.getVendors().get(0).getImpConsPurposes().get()); + Assertions.assertEquals(Arrays.asList(2, 7), gvl.getVendors().get(0).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); + Assertions.assertEquals(Collections.singletonList(3), gvl.getVendors().get(0).getFeatures()); + Assertions.assertEquals( + Collections.singletonList(1), gvl.getVendors().get(0).getSpecialFeatures()); + Assertions.assertTrue(gvl.getVendors().get(0).getUrls().isPresent()); + Assertions.assertEquals( + "https://www.indexexchange.com/privacy/", + gvl.getVendors().get(0).getUrls().get().get(0).getPrivacy()); + Assertions.assertEquals("en", gvl.getVendors().get(0).getUrls().get().get(0).getLangId()); + Assertions.assertEquals(52, gvl.getVendors().get(1).getId()); + Assertions.assertFalse(gvl.getVendors().get(1).getDeletedDate().isPresent()); + } } diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java index 04ba44c9..f79f5731 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV2Test.java @@ -20,20 +20,23 @@ * #L% */ +import com.iab.gpp.extras.gvl.Gvl; +import com.iab.gpp.extras.jackson.Loader; import java.io.IOException; import java.util.Arrays; -import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.gvl.Gvl; -import com.iab.gpp.extras.jackson.Loader; public class GvlV2Test { @Test public void test() throws IOException { - Gvl gvl = new Loader() - .globalVendorList(GvlV2Test.class.getClassLoader().getResourceAsStream("vendorlist/v2/vendor-list.json")); + Gvl gvl = + new Loader() + .globalVendorList( + GvlV2Test.class + .getClassLoader() + .getResourceAsStream("vendorlist/v2/vendor-list.json")); Assertions.assertFalse(gvl.getDataCategories().isPresent()); Assertions.assertEquals(3, gvl.getFeatures().size()); Assertions.assertEquals(2, gvl.getGvlSpecificationVersion()); @@ -47,7 +50,8 @@ public void test() throws IOException { Assertions.assertEquals(496, gvl.getVendors().size()); Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); - Assertions.assertEquals("Store and/or access information on a device", gvl.getPurposes().get(0).getName()); + Assertions.assertEquals( + "Store and/or access information on a device", gvl.getPurposes().get(0).getName()); Assertions.assertEquals( "Cookies, device identifiers, or other information can be stored or accessed on your device for the purposes presented to you.", gvl.getPurposes().get(0).getDescription()); @@ -58,7 +62,8 @@ public void test() throws IOException { Assertions.assertFalse(gvl.getPurposes().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); - Assertions.assertEquals("Ensure security, prevent fraud, and debug", gvl.getSpecialPurposes().get(0).getName()); + Assertions.assertEquals( + "Ensure security, prevent fraud, and debug", gvl.getSpecialPurposes().get(0).getName()); Assertions.assertEquals( "Your data can be used to monitor for and prevent fraudulent activity, and ensure systems and processes work properly and securely.", gvl.getSpecialPurposes().get(0).getDescription()); @@ -69,7 +74,8 @@ public void test() throws IOException { Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); - Assertions.assertEquals("Match and combine offline data sources", gvl.getFeatures().get(0).getName()); + Assertions.assertEquals( + "Match and combine offline data sources", gvl.getFeatures().get(0).getName()); Assertions.assertEquals( "Data from offline data sources can be combined with your online activity in support of one or more purposes", gvl.getFeatures().get(0).getDescription()); @@ -80,7 +86,8 @@ public void test() throws IOException { Assertions.assertFalse(gvl.getFeatures().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); - Assertions.assertEquals("Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); + Assertions.assertEquals( + "Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); Assertions.assertEquals( "Your precise geolocation data can be used in support of one or more purposes. This means your location can be accurate to within several meters.", gvl.getSpecialFeatures().get(0).getDescription()); @@ -91,32 +98,39 @@ public void test() throws IOException { Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); - Assertions.assertEquals("Precise geolocation data, and identification through device scanning", gvl.getStacks().get(0).getName()); - Assertions.assertEquals("Precise geolocation and information about device characteristics can be used.", gvl.getStacks().get(0).getDescription()); + Assertions.assertEquals( + "Precise geolocation data, and identification through device scanning", + gvl.getStacks().get(0).getName()); + Assertions.assertEquals( + "Precise geolocation and information about device characteristics can be used.", + gvl.getStacks().get(0).getDescription()); Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); - + Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); Assertions.assertEquals("Basic ads, and ad measurement", gvl.getStacks().get(1).getName()); - Assertions.assertEquals("Basic ads can be served. Ad performance can be measured.", gvl.getStacks().get(1).getDescription()); + Assertions.assertEquals( + "Basic ads can be served. Ad performance can be measured.", + gvl.getStacks().get(1).getDescription()); Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); - - Assertions.assertEquals(8, gvl.getVendors().get(0).getId()); + + Assertions.assertEquals(8, gvl.getVendors().get(0).getId()); Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); Assertions.assertEquals("Emerse Sverige AB", gvl.getVendors().get(0).getName()); Assertions.assertEquals(Arrays.asList(1, 3, 4), gvl.getVendors().get(0).getPurposes()); Assertions.assertTrue(gvl.getVendors().get(0).getLegIntPurposes().isPresent()); - Assertions.assertEquals(Arrays.asList(2, 7, 8, 9), gvl.getVendors().get(0).getLegIntPurposes().get()); - Assertions.assertEquals(Arrays.asList(2, 9), gvl.getVendors().get(0).getFlexiblePurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getFeatures()); + Assertions.assertEquals( + Arrays.asList(2, 7, 8, 9), gvl.getVendors().get(0).getLegIntPurposes().get()); + Assertions.assertEquals(Arrays.asList(2, 9), gvl.getVendors().get(0).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getFeatures()); Assertions.assertTrue(gvl.getVendors().get(0).getSpecialFeatures().isEmpty()); Assertions.assertTrue(gvl.getVendors().get(0).getPolicyUrl().isPresent()); - Assertions.assertEquals("https://www.emerse.com/privacy-policy/", gvl.getVendors().get(0).getPolicyUrl().get()); - - Assertions.assertEquals(9, gvl.getVendors().get(1).getId()); + Assertions.assertEquals( + "https://www.emerse.com/privacy-policy/", gvl.getVendors().get(0).getPolicyUrl().get()); + + Assertions.assertEquals(9, gvl.getVendors().get(1).getId()); Assertions.assertTrue(gvl.getVendors().get(1).getDeletedDate().isPresent()); } - } diff --git a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java index e27831f1..3a554b71 100644 --- a/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java +++ b/iabgpp-extras-jackson/src/test/java/com/iab/gpp/extras/jackson/gvl/GvlV3Test.java @@ -20,21 +20,24 @@ * #L% */ +import com.iab.gpp.extras.gvl.Gvl; +import com.iab.gpp.extras.jackson.Loader; import java.io.IOException; import java.util.Arrays; import java.util.Collections; - import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import com.iab.gpp.extras.gvl.Gvl; -import com.iab.gpp.extras.jackson.Loader; public class GvlV3Test { @Test public void test() throws IOException { - Gvl gvl = new Loader() - .globalVendorList(GvlV3Test.class.getClassLoader().getResourceAsStream("vendorlist/v3.0/vendor-list.json")); + Gvl gvl = + new Loader() + .globalVendorList( + GvlV3Test.class + .getClassLoader() + .getResourceAsStream("vendorlist/v3.0/vendor-list.json")); Assertions.assertTrue(gvl.getDataCategories().isPresent()); Assertions.assertEquals(3, gvl.getFeatures().size()); Assertions.assertEquals(3, gvl.getGvlSpecificationVersion()); @@ -46,64 +49,91 @@ public void test() throws IOException { Assertions.assertEquals(4, gvl.getTcfPolicyVersion()); Assertions.assertEquals(7, gvl.getVendorListVersion()); Assertions.assertEquals(376, gvl.getVendors().size()); - + Assertions.assertEquals(1, gvl.getPurposes().get(0).getId()); - Assertions.assertEquals("Store and/or access information on a device", gvl.getPurposes().get(0).getName()); - Assertions.assertEquals("Cookies, device or similar online identifiers (e.g. login-based identifiers, randomly assigned identifiers, network based identifiers) together with other information (e.g. browser type and information, language, screen size, supported technologies etc.) can be stored or read on your device to recognise it each time it connects to an app or to a website, for one or several of the purposes presented here. ", gvl.getPurposes().get(0).getDescription()); + Assertions.assertEquals( + "Store and/or access information on a device", gvl.getPurposes().get(0).getName()); + Assertions.assertEquals( + "Cookies, device or similar online identifiers (e.g. login-based identifiers, randomly assigned identifiers, network based identifiers) together with other information (e.g. browser type and information, language, screen size, supported technologies etc.) can be stored or read on your device to recognise it each time it connects to an app or to a website, for one or several of the purposes presented here. ", + gvl.getPurposes().get(0).getDescription()); Assertions.assertFalse(gvl.getPurposes().get(0).getDescriptionLegal().isPresent()); Assertions.assertTrue(gvl.getPurposes().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getPurposes().get(0).getIllustrations().get().size()); - + Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getId()); - Assertions.assertEquals("Ensure security, prevent and detect fraud, and fix errors\n", gvl.getSpecialPurposes().get(0).getName()); - Assertions.assertEquals("Your data can be used to monitor for and prevent unusual and possibly fraudulent activity (for example, regarding advertising, ad clicks by bots), and ensure systems and processes work properly and securely. It can also be used to correct any problems you, the publisher or the advertiser may encounter in the delivery of content and ads and in your interaction with them.", gvl.getSpecialPurposes().get(0).getDescription()); + Assertions.assertEquals( + "Ensure security, prevent and detect fraud, and fix errors\n", + gvl.getSpecialPurposes().get(0).getName()); + Assertions.assertEquals( + "Your data can be used to monitor for and prevent unusual and possibly fraudulent activity (for example, regarding advertising, ad clicks by bots), and ensure systems and processes work properly and securely. It can also be used to correct any problems you, the publisher or the advertiser may encounter in the delivery of content and ads and in your interaction with them.", + gvl.getSpecialPurposes().get(0).getDescription()); Assertions.assertFalse(gvl.getSpecialPurposes().get(0).getDescriptionLegal().isPresent()); Assertions.assertTrue(gvl.getSpecialPurposes().get(0).getIllustrations().isPresent()); Assertions.assertEquals(1, gvl.getSpecialPurposes().get(0).getIllustrations().get().size()); - + Assertions.assertEquals(1, gvl.getFeatures().get(0).getId()); - Assertions.assertEquals("Match and combine data from other data sources", gvl.getFeatures().get(0).getName()); - Assertions.assertEquals("Information about your activity on this service may be matched and combined with other information relating to you and originating from various sources (for instance your activity on a separate online service, your use of a loyalty card in-store, or your answers to a survey), in support of the purposes explained in this notice.", gvl.getFeatures().get(0).getDescription()); + Assertions.assertEquals( + "Match and combine data from other data sources", gvl.getFeatures().get(0).getName()); + Assertions.assertEquals( + "Information about your activity on this service may be matched and combined with other information relating to you and originating from various sources (for instance your activity on a separate online service, your use of a loyalty card in-store, or your answers to a survey), in support of the purposes explained in this notice.", + gvl.getFeatures().get(0).getDescription()); Assertions.assertFalse(gvl.getFeatures().get(0).getDescriptionLegal().isPresent()); Assertions.assertTrue(gvl.getFeatures().get(0).getIllustrations().isPresent()); Assertions.assertEquals(0, gvl.getFeatures().get(0).getIllustrations().get().size()); - + Assertions.assertEquals(1, gvl.getSpecialFeatures().get(0).getId()); - Assertions.assertEquals("Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); - Assertions.assertEquals("With your acceptance, your precise location (within a radius of less than 500 metres) may be used in support of the purposes explained in this notice.", gvl.getSpecialFeatures().get(0).getDescription()); + Assertions.assertEquals( + "Use precise geolocation data", gvl.getSpecialFeatures().get(0).getName()); + Assertions.assertEquals( + "With your acceptance, your precise location (within a radius of less than 500 metres) may be used in support of the purposes explained in this notice.", + gvl.getSpecialFeatures().get(0).getDescription()); Assertions.assertFalse(gvl.getSpecialFeatures().get(0).getDescriptionLegal().isPresent()); Assertions.assertTrue(gvl.getSpecialFeatures().get(0).getIllustrations().isPresent()); Assertions.assertEquals(0, gvl.getSpecialFeatures().get(0).getIllustrations().get().size()); - + Assertions.assertEquals(1, gvl.getStacks().get(0).getId()); - Assertions.assertEquals("Precise geolocation data, and identification through device scanning", gvl.getStacks().get(0).getName()); - Assertions.assertEquals("Precise geolocation and information about device characteristics can be used.\n\n", gvl.getStacks().get(0).getDescription()); + Assertions.assertEquals( + "Precise geolocation data, and identification through device scanning", + gvl.getStacks().get(0).getName()); + Assertions.assertEquals( + "Precise geolocation and information about device characteristics can be used.\n\n", + gvl.getStacks().get(0).getDescription()); Assertions.assertTrue(gvl.getStacks().get(0).getPurposes().isEmpty()); Assertions.assertEquals(Arrays.asList(1, 2), gvl.getStacks().get(0).getSpecialFeatures()); - + Assertions.assertEquals(2, gvl.getStacks().get(1).getId()); - Assertions.assertEquals("Advertising based on limited data and advertising measurement", gvl.getStacks().get(1).getName()); - Assertions.assertEquals("Advertising can be presented based on limited data. Advertising performance can be measured.", gvl.getStacks().get(1).getDescription()); + Assertions.assertEquals( + "Advertising based on limited data and advertising measurement", + gvl.getStacks().get(1).getName()); + Assertions.assertEquals( + "Advertising can be presented based on limited data. Advertising performance can be measured.", + gvl.getStacks().get(1).getDescription()); Assertions.assertEquals(Arrays.asList(2, 7), gvl.getStacks().get(1).getPurposes()); Assertions.assertTrue(gvl.getStacks().get(1).getSpecialFeatures().isEmpty()); - + Assertions.assertEquals(1, gvl.getDataCategories().get().get(0).getId()); Assertions.assertEquals("IP addresses", gvl.getDataCategories().get().get(0).getName()); - Assertions.assertEquals("Your IP address is a number assigned by your Internet Service Provider to any Internet connection. It is not always specific to your device and is not always a stable identifier.\nIt is used to route information on the Internet and display online content (including ads) on your connected device.", gvl.getDataCategories().get().get(0).getDescription()); - - Assertions.assertEquals(1, gvl.getVendors().get(0).getId()); + Assertions.assertEquals( + "Your IP address is a number assigned by your Internet Service Provider to any Internet connection. It is not always specific to your device and is not always a stable identifier.\nIt is used to route information on the Internet and display online content (including ads) on your connected device.", + gvl.getDataCategories().get().get(0).getDescription()); + + Assertions.assertEquals(1, gvl.getVendors().get(0).getId()); Assertions.assertFalse(gvl.getVendors().get(0).getDeletedDate().isPresent()); - Assertions.assertEquals("Exponential Interactive, Inc d/b/a VDX.tv", gvl.getVendors().get(0).getName()); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 7, 8, 9, 10), gvl.getVendors().get(0).getPurposes()); + Assertions.assertEquals( + "Exponential Interactive, Inc d/b/a VDX.tv", gvl.getVendors().get(0).getName()); + Assertions.assertEquals( + Arrays.asList(1, 2, 3, 4, 7, 8, 9, 10), gvl.getVendors().get(0).getPurposes()); Assertions.assertTrue(gvl.getVendors().get(0).getLegIntPurposes().isPresent()); - Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(0).getLegIntPurposes().get()); - Assertions.assertEquals(Arrays.asList(7, 8, 9, 10), gvl.getVendors().get(0).getFlexiblePurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); - Assertions.assertEquals(Arrays.asList(1, 2, 3), gvl.getVendors().get(0).getFeatures()); + Assertions.assertEquals( + Collections.emptyList(), gvl.getVendors().get(0).getLegIntPurposes().get()); + Assertions.assertEquals( + Arrays.asList(7, 8, 9, 10), gvl.getVendors().get(0).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(0).getSpecialPurposes()); + Assertions.assertEquals(Arrays.asList(1, 2, 3), gvl.getVendors().get(0).getFeatures()); Assertions.assertTrue(gvl.getVendors().get(0).getSpecialFeatures().isEmpty()); Assertions.assertFalse(gvl.getVendors().get(0).getPolicyUrl().isPresent()); Assertions.assertTrue(gvl.getVendors().get(0).getCookieMaxAgeSeconds().isPresent()); - Assertions.assertEquals(7776000, gvl.getVendors().get(0).getCookieMaxAgeSeconds().get()); + Assertions.assertEquals(7776000, gvl.getVendors().get(0).getCookieMaxAgeSeconds().get()); Assertions.assertTrue(gvl.getVendors().get(0).getUsesCookies().isPresent()); Assertions.assertTrue(gvl.getVendors().get(0).getUsesCookies().get()); Assertions.assertTrue(gvl.getVendors().get(0).getCookieRefresh().isPresent()); @@ -111,34 +141,45 @@ public void test() throws IOException { Assertions.assertTrue(gvl.getVendors().get(0).getUsesNonCookieAccess().isPresent()); Assertions.assertFalse(gvl.getVendors().get(0).getUsesNonCookieAccess().get()); Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().isPresent()); - Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().get().getStdRetention().isPresent()); - Assertions.assertEquals(397, gvl.getVendors().get(0).getDataRetention().get().getStdRetention().get()); + Assertions.assertTrue( + gvl.getVendors().get(0).getDataRetention().get().getStdRetention().isPresent()); + Assertions.assertEquals( + 397, gvl.getVendors().get(0).getDataRetention().get().getStdRetention().get()); Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().get().getPurposes().isEmpty()); - Assertions.assertTrue(gvl.getVendors().get(0).getDataRetention().get().getSpecialPurposes().isEmpty()); + Assertions.assertTrue( + gvl.getVendors().get(0).getDataRetention().get().getSpecialPurposes().isEmpty()); Assertions.assertTrue(gvl.getVendors().get(0).getUrls().isPresent()); Assertions.assertEquals(1, gvl.getVendors().get(0).getUrls().get().size()); Assertions.assertEquals("en", gvl.getVendors().get(0).getUrls().get().get(0).getLangId()); - Assertions.assertEquals("https://vdx.tv/privacy/", gvl.getVendors().get(0).getUrls().get().get(0).getPrivacy()); - Assertions.assertTrue(gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().isPresent()); - Assertions.assertEquals("https://cdnx.exponential.com/wp-content/uploads/2018/04/Balancing-Assessment-for-Legitimate-Interest-Publishers-v2.pdf", gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().get()); + Assertions.assertEquals( + "https://vdx.tv/privacy/", gvl.getVendors().get(0).getUrls().get().get(0).getPrivacy()); + Assertions.assertTrue( + gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().isPresent()); + Assertions.assertEquals( + "https://cdnx.exponential.com/wp-content/uploads/2018/04/Balancing-Assessment-for-Legitimate-Interest-Publishers-v2.pdf", + gvl.getVendors().get(0).getUrls().get().get(0).getLegIntClaim().get()); Assertions.assertTrue(gvl.getVendors().get(0).getDataDeclaration().isPresent()); - Assertions.assertEquals(Arrays.asList(1, 3, 4, 6, 8, 10, 11), gvl.getVendors().get(0).getDataDeclaration().get()); + Assertions.assertEquals( + Arrays.asList(1, 3, 4, 6, 8, 10, 11), gvl.getVendors().get(0).getDataDeclaration().get()); Assertions.assertTrue(gvl.getVendors().get(0).getDeviceStorageDisclosureUrl().isPresent()); - Assertions.assertEquals("https://vdxtv.expo.workers.dev", gvl.getVendors().get(0).getDeviceStorageDisclosureUrl().get()); - - Assertions.assertEquals(12, gvl.getVendors().get(4).getId()); + Assertions.assertEquals( + "https://vdxtv.expo.workers.dev", + gvl.getVendors().get(0).getDeviceStorageDisclosureUrl().get()); + + Assertions.assertEquals(12, gvl.getVendors().get(4).getId()); Assertions.assertFalse(gvl.getVendors().get(4).getDeletedDate().isPresent()); Assertions.assertEquals("BeeswaxIO Corporation", gvl.getVendors().get(4).getName()); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 7), gvl.getVendors().get(4).getPurposes()); + Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 7), gvl.getVendors().get(4).getPurposes()); Assertions.assertTrue(gvl.getVendors().get(4).getLegIntPurposes().isPresent()); - Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(4).getLegIntPurposes().get()); - Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(4).getFlexiblePurposes()); - Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(4).getSpecialPurposes()); - Assertions.assertEquals(Arrays.asList(1, 3), gvl.getVendors().get(4).getFeatures()); - Assertions.assertEquals(Arrays.asList(1), gvl.getVendors().get(4).getSpecialFeatures()); + Assertions.assertEquals( + Collections.emptyList(), gvl.getVendors().get(4).getLegIntPurposes().get()); + Assertions.assertEquals(Collections.emptyList(), gvl.getVendors().get(4).getFlexiblePurposes()); + Assertions.assertEquals(Arrays.asList(1, 2), gvl.getVendors().get(4).getSpecialPurposes()); + Assertions.assertEquals(Arrays.asList(1, 3), gvl.getVendors().get(4).getFeatures()); + Assertions.assertEquals(Arrays.asList(1), gvl.getVendors().get(4).getSpecialFeatures()); Assertions.assertFalse(gvl.getVendors().get(4).getPolicyUrl().isPresent()); Assertions.assertTrue(gvl.getVendors().get(4).getCookieMaxAgeSeconds().isPresent()); - Assertions.assertEquals(34109999, gvl.getVendors().get(4).getCookieMaxAgeSeconds().get()); + Assertions.assertEquals(34109999, gvl.getVendors().get(4).getCookieMaxAgeSeconds().get()); Assertions.assertTrue(gvl.getVendors().get(4).getUsesCookies().isPresent()); Assertions.assertTrue(gvl.getVendors().get(4).getUsesCookies().get()); Assertions.assertTrue(gvl.getVendors().get(4).getCookieRefresh().isPresent()); @@ -146,26 +187,40 @@ public void test() throws IOException { Assertions.assertTrue(gvl.getVendors().get(4).getUsesNonCookieAccess().isPresent()); Assertions.assertTrue(gvl.getVendors().get(4).getUsesNonCookieAccess().get()); Assertions.assertTrue(gvl.getVendors().get(4).getDataRetention().isPresent()); - Assertions.assertTrue(gvl.getVendors().get(4).getDataRetention().get().getStdRetention().isPresent()); - Assertions.assertEquals(0, gvl.getVendors().get(4).getDataRetention().get().getStdRetention().get()); - Assertions.assertEquals(1, gvl.getVendors().get(4).getDataRetention().get().getPurposes().size()); - Assertions.assertEquals(4320, gvl.getVendors().get(4).getDataRetention().get().getPurposes().get(7)); - Assertions.assertEquals(2, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().size()); - Assertions.assertEquals(392, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(1)); - Assertions.assertEquals(4320, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(2)); + Assertions.assertTrue( + gvl.getVendors().get(4).getDataRetention().get().getStdRetention().isPresent()); + Assertions.assertEquals( + 0, gvl.getVendors().get(4).getDataRetention().get().getStdRetention().get()); + Assertions.assertEquals( + 1, gvl.getVendors().get(4).getDataRetention().get().getPurposes().size()); + Assertions.assertEquals( + 4320, gvl.getVendors().get(4).getDataRetention().get().getPurposes().get(7)); + Assertions.assertEquals( + 2, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().size()); + Assertions.assertEquals( + 392, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(1)); + Assertions.assertEquals( + 4320, gvl.getVendors().get(4).getDataRetention().get().getSpecialPurposes().get(2)); Assertions.assertTrue(gvl.getVendors().get(4).getUrls().isPresent()); Assertions.assertEquals(1, gvl.getVendors().get(4).getUrls().get().size()); Assertions.assertEquals("en", gvl.getVendors().get(4).getUrls().get().get(0).getLangId()); - Assertions.assertEquals("https://www.beeswax.com/privacy/", gvl.getVendors().get(4).getUrls().get().get(0).getPrivacy()); - Assertions.assertTrue(gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().isPresent()); - Assertions.assertEquals("https://www.beeswax.com/privacy/", gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().get()); + Assertions.assertEquals( + "https://www.beeswax.com/privacy/", + gvl.getVendors().get(4).getUrls().get().get(0).getPrivacy()); + Assertions.assertTrue( + gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().isPresent()); + Assertions.assertEquals( + "https://www.beeswax.com/privacy/", + gvl.getVendors().get(4).getUrls().get().get(0).getLegIntClaim().get()); Assertions.assertTrue(gvl.getVendors().get(4).getDataDeclaration().isPresent()); - Assertions.assertEquals(Arrays.asList(1, 2, 3, 4, 6, 8, 9, 11), gvl.getVendors().get(4).getDataDeclaration().get()); + Assertions.assertEquals( + Arrays.asList(1, 2, 3, 4, 6, 8, 9, 11), gvl.getVendors().get(4).getDataDeclaration().get()); Assertions.assertTrue(gvl.getVendors().get(4).getDeviceStorageDisclosureUrl().isPresent()); - Assertions.assertEquals("https://beeswax.com/devicedisclosure.json", gvl.getVendors().get(4).getDeviceStorageDisclosureUrl().get()); - + Assertions.assertEquals( + "https://beeswax.com/devicedisclosure.json", + gvl.getVendors().get(4).getDeviceStorageDisclosureUrl().get()); + Assertions.assertTrue(gvl.getVendor(26).getCookieRefresh().isPresent()); Assertions.assertFalse(gvl.getVendor(26).getCookieRefresh().get()); } - } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java index 5f3c3d4a..9bf72400 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/cmp/CmpList.java @@ -46,5 +46,4 @@ public interface CmpList { * @return {@link Cmp} object */ Cmp getCmp(int cmpId); - } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java index e7e62cc3..4d54ae7c 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataCategory.java @@ -25,5 +25,4 @@ public interface DataCategory { * @return description */ String getDescription(); - } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java index 12615dfa..ec11c2f1 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/DataRetention.java @@ -1,6 +1,5 @@ package com.iab.gpp.extras.gvl; -import java.util.List; import java.util.Map; import java.util.Optional; @@ -49,5 +48,4 @@ public interface DataRetention { * @return specialPurposes */ Map getSpecialPurposes(); - } diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java index a1a6e545..057820a2 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Gvl.java @@ -106,8 +106,8 @@ public interface Gvl { /** * A list of data categories - * @since 3.0 * + * @since 3.0 * @return A {@link List} of {@link DataCategory} objects */ Optional> getDataCategories(); diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java index 12a74b0e..638236c0 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Overflow.java @@ -9,9 +9,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -20,7 +20,6 @@ * #L% */ - public interface Overflow { /** diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java index 2f2812d7..38a17ff5 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Purpose.java @@ -23,9 +23,7 @@ * #L% */ -/** - * A standard purpose - */ +/** A standard purpose */ public interface Purpose { /** @@ -51,20 +49,22 @@ public interface Purpose { /** * Legal description of the purpose + * * @return legal description string */ Optional getDescriptionLegal(); /** * A list of illustrations + * * @since 3.0 * @return A {@link List} of strings */ Optional> getIllustrations(); /** - * An optional flag where false means CMPs should never afford users the means to provide an opt-in - * consent choice + * An optional flag where false means CMPs should never afford users the means to provide an + * opt-in consent choice * * @return consentable boolean */ diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialFeature.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialFeature.java index c6691277..40501d6c 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialFeature.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialFeature.java @@ -25,6 +25,4 @@ * signal an opt-in choice as to whether vendors may employ the feature when performing any purpose * processing. See Policies for specifics. */ -public interface SpecialFeature extends Feature { - -} +public interface SpecialFeature extends Feature {} diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialPurpose.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialPurpose.java index f288572f..d987d30b 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialPurpose.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/SpecialPurpose.java @@ -20,9 +20,5 @@ * #L% */ -/** - * A special purpose declared as performed on the legal basis of a legitimate interest - */ -public interface SpecialPurpose extends Purpose { - -} +/** A special purpose declared as performed on the legal basis of a legitimate interest */ +public interface SpecialPurpose extends Purpose {} diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java index 480a21b7..f17062e2 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/Vendor.java @@ -27,8 +27,8 @@ public interface Vendor { /** - * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors are - * just marked as deleted + * A vendor id: a numeric ID which is incrementally assigned and never re-used – deleted Vendors + * are just marked as deleted * * @return vendor id */ @@ -49,8 +49,8 @@ public interface Vendor { List getPurposes(); /** - * List of Purposes for which the vendor requires to be transparently disclosed as their legitimate - * interest + * List of Purposes for which the vendor requires to be transparently disclosed as their + * legitimate interest * * @return A {@link List} of purpose ids disclosed as legitimate interests */ @@ -66,8 +66,8 @@ public interface Vendor { /** * List of purposes where the vendor is flexible regarding the legal basis; they will perform the - * processing based on consent or a legitimate interest. The 'default' is determined by which of the - * other two mutually-exclusive purpose fields is used to declare the purpose for the vendor + * processing based on consent or a legitimate interest. The 'default' is determined by which of + * the other two mutually-exclusive purpose fields is used to declare the purpose for the vendor * * @return A {@link List} of flexible purpose ids */ @@ -97,6 +97,7 @@ public interface Vendor { /** * GDPR/privacy policy page URL + * * @deprecated since 3.0 * @return policy url string */ @@ -111,7 +112,8 @@ public interface Vendor { /** * object specifying the vendor's http GET request length limit. It is optional. If a vendor entry - * does not include this attribute then the vendor has no overflow options and none can be inferred. + * does not include this attribute then the vendor has no overflow options and none can be + * inferred. * * @return A {@link Overflow} object */ @@ -125,23 +127,23 @@ public interface Vendor { boolean isDeleted(); /** - * The number of seconds representing the longest potential duration for cookie storage on a device. - * If a Vendor uses multiple cookies with differing durations, cookieMaxAgeSeconds represents the - * cookie with the longest duration. Note: cookies are the only method of storage or device access - * that permit a predictable duration to be set. This is required only if usesCookies is set to - * true, else optional - * - * @return The number, in seconds, of the longest potential duration for storage on a device, as set - * when using the cookie method of storage. A negative number or a 0 indicate session - * storage similar to the Set-Cookie spec. A "-100" value no longer indicates no cookie - * usage. Note: this only includes what is declared when the storage is set and does not - * consider duration extensions should storage be refreshed + * The number of seconds representing the longest potential duration for cookie storage on a + * device. If a Vendor uses multiple cookies with differing durations, cookieMaxAgeSeconds + * represents the cookie with the longest duration. Note: cookies are the only method of storage + * or device access that permit a predictable duration to be set. This is required only if + * usesCookies is set to true, else optional + * + * @return The number, in seconds, of the longest potential duration for storage on a device, as + * set when using the cookie method of storage. A negative number or a 0 indicate session + * storage similar to the Set-Cookie spec. A "-100" value no longer indicates no cookie usage. + * Note: this only includes what is declared when the storage is set and does not consider + * duration extensions should storage be refreshed */ Optional getCookieMaxAgeSeconds(); /** * This boolean field indicates whether the vendor uses cookie storage (session or otherwise). - * + * * @return True indicates cookie storage is used */ Optional getUsesCookies(); @@ -149,47 +151,49 @@ public interface Vendor { /** * This true or false field indicates whether any cookies in scope for cookieMaxAgeSeconds are * refreshed after being initially set. - * + * * @return True indicates the vendor refreshes this cookie */ - Optional getCookieRefresh(); + Optional getCookieRefresh(); /** * This boolean field indicates whether the vendor uses other, non-cookie methods of storage or * accessing information already stored on a user’s device. Examples of non-cookie storage and * access may be localStorage, indexDB, mobile ad IDs, etc. - * + * * @return True indicates non-cookie access is used */ - Optional getUsesNonCookieAccess(); + Optional getUsesNonCookieAccess(); /** * Link to a recommended, vendor-hosted, secure URL for disclosing additional storage information - * + * * @return Location of vendor-hosted deviceStorage.json file */ Optional getDeviceStorageDisclosureUrl(); /** * This object indicates how long vendors retain user's data for each declared purpose + * * @since 3.0 - * * @return {@link DataRetention} object */ Optional getDataRetention(); /** - * This list indicates unique urls to privacy policies by language and link to an - * explanation of their legitimate interests at stake + * This list indicates unique urls to privacy policies by language and link to an explanation of + * their legitimate interests at stake + * * @since 3.0 * @return A {@link List} of {@link VendorUrl} objects */ Optional> getUrls(); /** - * This list of integers indicates data categories {@link DataCategory} that vendors collect and process - * @since 3.0 + * This list of integers indicates data categories {@link DataCategory} that vendors collect and + * process * + * @since 3.0 * @return A {@link List} of integers */ Optional> getDataDeclaration(); diff --git a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java index 7a495de7..af548f64 100644 --- a/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java +++ b/iabgpp-extras/src/main/java/com/iab/gpp/extras/gvl/VendorUrl.java @@ -47,5 +47,4 @@ public interface VendorUrl { * @return legIntClaim */ Optional getLegIntClaim(); - } From 2fd8542e8a64f25ab66b9f1bc305a9cc2e31808a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 11:03:24 -0500 Subject: [PATCH 125/146] remove useless formatter on/off --- .../java/com/iab/gpp/encoder/field/HeaderV1Field.java | 3 --- .../main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java | 6 ------ .../main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java | 8 -------- .../main/java/com/iab/gpp/encoder/field/UsCaField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsCoField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsCtField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsDeField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsFlField.java | 2 -- .../main/java/com/iab/gpp/encoder/field/UsIaField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsMtField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsNatField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsNeField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsNhField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsNjField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsOrField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsTnField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsTxField.java | 4 ---- .../main/java/com/iab/gpp/encoder/field/UsUtField.java | 2 -- .../main/java/com/iab/gpp/encoder/field/UsVaField.java | 2 -- .../main/java/com/iab/gpp/encoder/field/UspV1Field.java | 2 -- 20 files changed, 77 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 65ecd219..ebe11eba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -21,9 +21,6 @@ public enum HeaderV1Field implements FieldKey { return type; } - // @formatter:off public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>(HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS); - // @formatter:on - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 8773a0bd..6f264b7d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -54,7 +54,6 @@ public enum TcfCaV1Field implements FieldKey { return type; } - // @formatter:off public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.VERSION, @@ -73,9 +72,7 @@ public enum TcfCaV1Field implements FieldKey { TcfCaV1Field.VENDOR_EXPRESS_CONSENT, TcfCaV1Field.VENDOR_IMPLIED_CONSENT, TcfCaV1Field.PUB_RESTRICTIONS); - // @formatter:on - // @formatter:off public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, @@ -84,10 +81,7 @@ public enum TcfCaV1Field implements FieldKey { TcfCaV1Field.NUM_CUSTOM_PURPOSES, TcfCaV1Field.CUSTOM_PURPOSES_EXPRESS_CONSENT, TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT); - // @formatter:on - // @formatter:off public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = new FieldNames<>(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, TcfCaV1Field.DISCLOSED_VENDORS); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 1218117f..45046e73 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -57,7 +57,6 @@ public enum TcfEuV2Field implements FieldKey { return type; } - // @formatter:off public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VERSION, @@ -79,9 +78,7 @@ public enum TcfEuV2Field implements FieldKey { TcfEuV2Field.VENDOR_CONSENTS, TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, TcfEuV2Field.PUBLISHER_RESTRICTIONS); - // @formatter:on - // @formatter:off public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, @@ -90,15 +87,10 @@ public enum TcfEuV2Field implements FieldKey { TcfEuV2Field.NUM_CUSTOM_PURPOSES, TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS, TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS); - // @formatter:on - // @formatter:off public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = new FieldNames<>(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED); - // @formatter:on - // @formatter:off public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = new FieldNames<>(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_DISCLOSED); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index af7f1e41..ec362cb1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -42,7 +42,6 @@ public enum UsCaField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCaField.VERSION, @@ -57,10 +56,7 @@ public enum UsCaField implements FieldKey { UsCaField.MSPA_COVERED_TRANSACTION, UsCaField.MSPA_OPT_OUT_OPTION_MODE, UsCaField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsCaField.GPC_SEGMENT_TYPE, UsCaField.GPC_SEGMENT_INCLUDED, UsCaField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index bb796d6f..4c0b6856 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -42,7 +42,6 @@ public enum UsCoField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCoField.VERSION, @@ -56,10 +55,7 @@ public enum UsCoField implements FieldKey { UsCoField.MSPA_COVERED_TRANSACTION, UsCoField.MSPA_OPT_OUT_OPTION_MODE, UsCoField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsCoField.GPC_SEGMENT_TYPE, UsCoField.GPC_SEGMENT_INCLUDED, UsCoField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 58fbdbae..b601a6d9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -42,7 +42,6 @@ public enum UsCtField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCtField.VERSION, @@ -56,10 +55,7 @@ public enum UsCtField implements FieldKey { UsCtField.MSPA_COVERED_TRANSACTION, UsCtField.MSPA_OPT_OUT_OPTION_MODE, UsCtField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsCtField.GPC_SEGMENT_TYPE, UsCtField.GPC_SEGMENT_INCLUDED, UsCtField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index c6ed86c7..addd25db 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -44,7 +44,6 @@ public enum UsDeField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsDeField.VERSION, @@ -59,10 +58,7 @@ public enum UsDeField implements FieldKey { UsDeField.MSPA_COVERED_TRANSACTION, UsDeField.MSPA_OPT_OUT_OPTION_MODE, UsDeField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsDeField.GPC_SEGMENT_TYPE, UsDeField.GPC_SEGMENT_INCLUDED, UsDeField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 3f45ecae..6edaec57 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -38,7 +38,6 @@ public enum UsFlField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsFlField.VERSION, @@ -53,5 +52,4 @@ public enum UsFlField implements FieldKey { UsFlField.MSPA_COVERED_TRANSACTION, UsFlField.MSPA_OPT_OUT_OPTION_MODE, UsFlField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index b0d655cc..2936a09d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -44,7 +44,6 @@ public enum UsIaField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsIaField.VERSION, @@ -59,10 +58,7 @@ public enum UsIaField implements FieldKey { UsIaField.MSPA_COVERED_TRANSACTION, UsIaField.MSPA_OPT_OUT_OPTION_MODE, UsIaField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsIaField.GPC_SEGMENT_TYPE, UsIaField.GPC_SEGMENT_INCLUDED, UsIaField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 6fda2f30..df7d4f4a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -44,7 +44,6 @@ public enum UsMtField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsMtField.VERSION, @@ -59,10 +58,7 @@ public enum UsMtField implements FieldKey { UsMtField.MSPA_COVERED_TRANSACTION, UsMtField.MSPA_OPT_OUT_OPTION_MODE, UsMtField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsMtField.GPC_SEGMENT_TYPE, UsMtField.GPC_SEGMENT_INCLUDED, UsMtField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 3c6fd6d2..b47410e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -49,7 +49,6 @@ public enum UsNatField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.VERSION, @@ -68,11 +67,8 @@ public enum UsNatField implements FieldKey { UsNatField.MSPA_COVERED_TRANSACTION, UsNatField.MSPA_OPT_OUT_OPTION_MODE, UsNatField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 069de8c2..909a1535 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -44,7 +44,6 @@ public enum UsNeField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNeField.VERSION, @@ -59,10 +58,7 @@ public enum UsNeField implements FieldKey { UsNeField.MSPA_COVERED_TRANSACTION, UsNeField.MSPA_OPT_OUT_OPTION_MODE, UsNeField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsNeField.GPC_SEGMENT_TYPE, UsNeField.GPC_SEGMENT_INCLUDED, UsNeField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index d0e41067..77f19359 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -44,7 +44,6 @@ public enum UsNhField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNhField.VERSION, @@ -59,10 +58,7 @@ public enum UsNhField implements FieldKey { UsNhField.MSPA_COVERED_TRANSACTION, UsNhField.MSPA_OPT_OUT_OPTION_MODE, UsNhField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsNhField.GPC_SEGMENT_TYPE, UsNhField.GPC_SEGMENT_INCLUDED, UsNhField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index b1dc6d64..1af14b6d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -44,7 +44,6 @@ public enum UsNjField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNjField.VERSION, @@ -59,10 +58,7 @@ public enum UsNjField implements FieldKey { UsNjField.MSPA_COVERED_TRANSACTION, UsNjField.MSPA_OPT_OUT_OPTION_MODE, UsNjField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsNjField.GPC_SEGMENT_TYPE, UsNjField.GPC_SEGMENT_INCLUDED, UsNjField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index a8a016fb..b030e519 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -44,7 +44,6 @@ public enum UsOrField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsOrField.VERSION, @@ -59,10 +58,7 @@ public enum UsOrField implements FieldKey { UsOrField.MSPA_COVERED_TRANSACTION, UsOrField.MSPA_OPT_OUT_OPTION_MODE, UsOrField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsOrField.GPC_SEGMENT_TYPE, UsOrField.GPC_SEGMENT_INCLUDED, UsOrField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index bc7c29d7..c62bd765 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -44,7 +44,6 @@ public enum UsTnField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTnField.VERSION, @@ -59,10 +58,7 @@ public enum UsTnField implements FieldKey { UsTnField.MSPA_COVERED_TRANSACTION, UsTnField.MSPA_OPT_OUT_OPTION_MODE, UsTnField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsTnField.GPC_SEGMENT_TYPE, UsTnField.GPC_SEGMENT_INCLUDED, UsTnField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index abcd9b58..227e97d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -44,7 +44,6 @@ public enum UsTxField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTxField.VERSION, @@ -59,10 +58,7 @@ public enum UsTxField implements FieldKey { UsTxField.MSPA_COVERED_TRANSACTION, UsTxField.MSPA_OPT_OUT_OPTION_MODE, UsTxField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on - // @formatter:off public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>(UsTxField.GPC_SEGMENT_TYPE, UsTxField.GPC_SEGMENT_INCLUDED, UsTxField.GPC); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 8b583cca..bc66fe8b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -38,7 +38,6 @@ public enum UsUtField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsUtField.VERSION, @@ -53,5 +52,4 @@ public enum UsUtField implements FieldKey { UsUtField.MSPA_COVERED_TRANSACTION, UsUtField.MSPA_OPT_OUT_OPTION_MODE, UsUtField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 057ed29f..459e45e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -36,7 +36,6 @@ public enum UsVaField implements FieldKey { return type; } - // @formatter:off public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsVaField.VERSION, @@ -50,5 +49,4 @@ public enum UsVaField implements FieldKey { UsVaField.MSPA_COVERED_TRANSACTION, UsVaField.MSPA_OPT_OUT_OPTION_MODE, UsVaField.MSPA_SERVICE_PROVIDER_MODE); - // @formatter:on } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index 4f584830..0888b876 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -24,9 +24,7 @@ public enum UspV1Field implements FieldKey { return type; } - // @formatter:off public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UspV1Field.VERSION, UspV1Field.NOTICE, UspV1Field.OPT_OUT_SALE, UspV1Field.LSPA_COVERED); - // @formatter:on } From d3aca8517cc6627913660e903bdd40da60a06b63 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 11:46:23 -0500 Subject: [PATCH 126/146] lazy slicing --- .../iab/gpp/encoder/section/SlicedCharSequence.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java index 33d62b76..b881e885 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public final class SlicedCharSequence implements CharSequence { @@ -35,13 +36,19 @@ public static List split(CharSequence charSequence, char splitter) start = 0; end = base.length(); } - // most sections/segments have less than 4 components - List out = new ArrayList<>(4); + List out = null; int next = 0; while ((next = base.indexOf(splitter, start, end)) != -1) { + if (out == null) { + // most sections/segments have less than 4 components + out = new ArrayList<>(4); + } out.add(new SlicedCharSequence(base, start, next)); start = next + 1; } + if (out == null) { + return Collections.singletonList(charSequence); + } out.add(new SlicedCharSequence(base, start, end)); return out; } From db1c6a169ddec884de947b596a8ecf168ab17dce Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 13:25:46 -0500 Subject: [PATCH 127/146] add mn --- README.md | 159 +--------------- .../java/com/iab/gpp/encoder/GppModel.java | 6 + .../com/iab/gpp/encoder/field/UsMnField.java | 64 +++++++ .../com/iab/gpp/encoder/section/UsMn.java | 97 ++++++++++ .../com/iab/gpp/encoder/GppModelTest.java | 9 +- .../com/iab/gpp/encoder/section/UsMnTest.java | 174 ++++++++++++++++++ 6 files changed, 354 insertions(+), 155 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMnField.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java create mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java diff --git a/README.md b/README.md index b4c3ee2b..ff5e524b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The official iabgpp java library is distributed through maven central. Please [s #### Decoding -``` +```xml com.iabgpp iabgpp-encoder @@ -37,7 +37,7 @@ Integer uspV1Notice = uspV1Section.getNotice(); #### Encoding -``` +```xml com.iabgpp iabgpp-encoder @@ -45,7 +45,7 @@ Integer uspV1Notice = uspV1Section.getNotice(); ``` -``` +```java import com.iab.gpp.encoder.GppModel; import com.iab.gpp.encoder.section.TcfEuV2; import com.iab.gpp.encoder.section.UspV1; @@ -76,7 +76,7 @@ String gppString = gppModel.encode(); The `iabgpp-extras` and `iabgpp-extras-jackson` libraries provides an interface and ability to parse the GVL and CMP List respectively. The `iabgpp-extras-jackson` library uses Jackson 2.10.3 to parse the GVL and CMP List JSON. -``` +```xml com.iabgpp iabgpp-extras @@ -93,7 +93,7 @@ List respectively. The `iabgpp-extras-jackson` library uses Jackson 2.10.3 to pa Example of parsing the GVL, -``` +```java import com.iab.gpp.extras.jackson.Loader; import com.iab.gpp.extras.gvl.Gvl; @@ -104,7 +104,7 @@ Gvl gvl = loader.globalVendorList(gvlContent); Example of parsing the CMP List, -``` +```java import com.iab.gpp.extras.jackson.Loader; import com.iab.gpp.extras.cmp.CmpList; @@ -113,153 +113,6 @@ Loader loader = new Loader(); CmpList cmpList = loader.cmpList(cmpListContent); ``` -### Fields - -|Section Name|Section ID|Field|Data Type/Value| -|------------|----------|-----|---------------| -|tcfeuv2|2|Version|6 bit int. Value is 2.| -|tcfeuv2|2|Created|Datetime. Updated when fields are set| -|tcfeuv2|2|LastUpdated|Datetime. Updated when fields are set| -|tcfeuv2|2|CmpId|12 bit int| -|tcfeuv2|2|CmpVersion|12 bit int| -|tcfeuv2|2|ConsentScreen|6 bit int| -|tcfeuv2|2|ConsentLanguage|2 character country code| -|tcfeuv2|2|VendorListVersion|12 bit int| -|tcfeuv2|2|PolicyVersion|6 bit int. Value is 2| -|tcfeuv2|2|IsServiceSpecific|Boolean| -|tcfeuv2|2|UseNonStandardStacks|Boolean| -|tcfeuv2|2|SpecialFeatureOptins|Boolean list of size 12| -|tcfeuv2|2|PurposeConsents|Boolean list of size 24| -|tcfeuv2|2|PurposeLegitimateInterests|Boolean list of size 24| -|tcfeuv2|2|PurposeOneTreatment|Boolean| -|tcfeuv2|2|PublisherCountryCode|2 character country code| -|tcfeuv2|2|VendorConsents|Integer list of variable size| -|tcfeuv2|2|VendorLegitimateInterests|Integer list of variable size| -|tcfeuv2|2|PublisherRestrictions|Integer list of variable size| -|tcfeuv2|2|PublisherPurposesSegmentType|3 bit int. Value is 3| -|tcfeuv2|2|PublisherConsents|Boolean list of size 24| -|tcfeuv2|2|PublisherLegitimateInterests|Boolean list of size 24| -|tcfeuv2|2|NumCustomPurposes|6 bit int| -|tcfeuv2|2|PublisherCustomConsents|Boolean list where size is set by the NumCustomPurposes field| -|tcfeuv2|2|PublisherCustomLegitimateInterests|Boolean list where size is set by the NumCustomPurposes field| -|tcfeuv2|2|VendorsAllowedSegmentType|3 bit int. Value is 2| -|tcfeuv2|2|VendorsAllowed|Integer list of variable size| -|tcfeuv2|2|VendorsDisclosedSegmentType|3 bit int. Value is 1| -|tcfeuv2|2|VendorsDisclosed|Integer list of variable size| -|tcfcav1|5|Version|6 bit int. Value is 2.| -|tcfcav1|5|Created|Datetime. Updated when any fields are set| -|tcfcav1|5|LastUpdated|Datetime. Updated when any fields are set| -|tcfcav1|5|CmpId|12 bit int| -|tcfcav1|5|CmpVersion|12 bit int| -|tcfcav1|5|ConsentScreen|6 bit int| -|tcfcav1|5|ConsentLanguage|2 character country code| -|tcfcav1|5|VendorListVersion|12 bit int| -|tcfcav1|5|TcfPolicyVersion|6 bit int. Value is 2.| -|tcfcav1|5|UseNonStandardStacks|Boolean| -|tcfcav1|5|SpecialFeatureExpressConsent|Boolean list of size 12| -|tcfcav1|5|PurposesExpressConsent|Boolean list of size 24| -|tcfcav1|5|PurposesImpliedConsent|Boolean list of size 24| -|tcfcav1|5|VendorExpressConsent|Integer list of variable size| -|tcfcav1|5|VendorImpliedConsent|Integer list of variable size| -|tcfcav1|5|PubRestrictions|RangeEntry list of variable size| -|tcfcav1|5|PubPurposesSegmentType|3 bit int. Value is 3| -|tcfcav1|5|PubPurposesExpressConsent|Boolean list of size 24| -|tcfcav1|5|PubPurposesImpliedConsent|Boolean list of size 24| -|tcfcav1|5|NumCustomPurposes|6 bit int| -|tcfcav1|5|CustomPurposesExpressConsent|Boolean list where size is set by the NumCustomPurposes field| -|tcfcav1|5|CustomPurposesImpliedConsent|Boolean list where size is set by the NumCustomPurposes field| -|tcfcav1|5|DisclosedVendorsSegmentType|3 bit int. Value is 1| -|tcfcav1|5|DisclosedVendors|Integer list of variable size| -|uspv1|6|Version|6 bit int. Value is 1| -|uspv1|6|Notice|2 bit int| -|uspv1|6|OptOutSale|2 bit int| -|uspv1|6|LspaCovered|2 bit int| -|usnat|7|Version|6 bit int. Value is 1| -|usnat|7|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SharingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SensitiveDataProcessingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SensitiveDataLimitUseNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SharingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|SensitiveDataProcessing|2 bit int list of size 12. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|KnownChildSensitiveDataConsents|2 bit int list of size 2. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|PersonalDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usnat|7|GpcSegmentType|2 bit int. Value is 1| -|usnat|7|GpcSegmentIncluded|Boolean. Default value is true| -|usnat|7|Gpc|Boolean| -|usca|8|Version|6 bit int. Value is 1| -|usca|8|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SharingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SensitiveDataLimitUseNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SharingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|SensitiveDataProcessing|2 bit int list of size 9. 0=Not applicable, 1=Yes, 2=No| -|usca|8|KnownChildSensitiveDataConsents|2 bit int list of size 2. 0=Not applicable, 1=Yes, 2=No| -|usca|8|PersonalDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usca|8|GpcSegmentType|2 bit int. Value is 1| -|usca|8|GpcSegmentIncluded|Boolean. Default value is true| -|usca|8|Gpc|Boolean| -|usva|9|Version|6 bit int. Value is 1| -|usva|9|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| -|usva|9|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usva|9|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|Version|6 bit int. Value is 1| -|usco|10|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|SensitiveDataProcessing|2 bit int list of size 7. 0=Not applicable, 1=Yes, 2=No| -|usco|10|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usco|10|GpcSegmentType|2 bit int. Value is 1| -|usco|10|GpcSegmentIncluded|Boolean. Default value is true| -|usco|10|Gpc|Boolean| -|usut|11|Version|6 bit int. Value is 1| -|usut|11|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|SensitiveDataProcessingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| -|usut|11|KnownChildSensitiveDataConsents|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usut|11|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|Version|6 bit int. Value is 1| -|usct|12|SharingNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|SaleOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|TargetedAdvertisingOptOutNotice|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|SaleOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|TargetedAdvertisingOptOut|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|SensitiveDataProcessing|2 bit int list of size 8. 0=Not applicable, 1=Yes, 2=No| -|usct|12|KnownChildSensitiveDataConsents|2 bit int list of size 3. 0=Not applicable, 1=Yes, 2=No| -|usct|12|MspaCoveredTransaction|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|MspaOptOutOptionMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|MspaServiceProviderMode|2 bit int. 0=Not applicable, 1=Yes, 2=No| -|usct|12|GpcSegmentType|2 bit int. Value is 1| -|usct|12|GpcSegmentIncluded|Boolean. Default value is true| -|usct|12|Gpc|Boolean| - ## Contributing Here you can find the [contributing guide](CONTRIBUTING.md) to help maintain and update the library. This library is managed by the Code Libraries Subgroup of the Global Privacy Working Group at the IAB Tech Lab. To join the group, please reach out to support@iabtechlab.com. diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 7ab69f1c..0a2f2941 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -15,6 +15,7 @@ import com.iab.gpp.encoder.section.UsDe; import com.iab.gpp.encoder.section.UsFl; import com.iab.gpp.encoder.section.UsIa; +import com.iab.gpp.encoder.section.UsMn; import com.iab.gpp.encoder.section.UsMt; import com.iab.gpp.encoder.section.UsNat; import com.iab.gpp.encoder.section.UsNe; @@ -62,6 +63,7 @@ public class GppModel extends AbstractEncodable { constructors.add(UsNh::new); constructors.add(UsNj::new); constructors.add(UsTn::new); + constructors.add(UsMn::new); for (Supplier> constructor : constructors) { EncodableSection prototype = constructor.get(); @@ -257,6 +259,10 @@ public UsTn getUsTnSection() { return (UsTn) getSection(UsTn.ID); } + public UsMn getUsMnSection() { + return (UsMn) getSection(UsMn.ID); + } + public List getSectionIds() { ensureDecode(); return new ArrayList<>(header.getSectionsIds()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMnField.java new file mode 100644 index 00000000..7c78b06e --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMnField.java @@ -0,0 +1,64 @@ +package com.iab.gpp.encoder.field; + +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.EncodableBoolean; +import com.iab.gpp.encoder.datatype.EncodableFixedInteger; +import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.section.UsMn; + +public enum UsMnField implements FieldKey { + VERSION(new EncodableFixedInteger<>("Version", 6, UsMn.VERSION)), + PROCESSING_NOTICE(new EncodableFixedInteger<>("ProcessingNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT_NOTICE(new EncodableFixedInteger<>("SaleOptOutNotice", 2, 0, VALIDATOR_012)), + TARGETED_ADVERTISING_OPT_OUT_NOTICE( + new EncodableFixedInteger<>("TargetedAdvertisingOptOutNotice", 2, 0, VALIDATOR_012)), + SALE_OPT_OUT(new EncodableFixedInteger<>("SaleOptOut", 2, 0, VALIDATOR_012)), + TARGETED_ADVERTISING_OPT_OUT( + new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), + SENSITIVE_DATA_PROCESSING( + new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 8, VALIDATOR_LIST_012)), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( + new EncodableFixedInteger<>("KnownChildSensitiveDataConsents", 2, 0, VALIDATOR_012)), + ADDITIONAL_DATA_PROCESSING_CONSENT( + new EncodableFixedInteger<>("AdditionalDataProcessingConsent", 2, 0, VALIDATOR_012)), + MSPA_COVERED_TRANSACTION( + new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), + MSPA_OPT_OUT_OPTION_MODE( + new EncodableFixedInteger<>("MspaOptOutOptionMode", 2, 0, VALIDATOR_012)), + MSPA_SERVICE_PROVIDER_MODE( + new EncodableFixedInteger<>("MspaServiceProviderMode", 2, 0, VALIDATOR_012)), + + GPC_SEGMENT_TYPE(new EncodableFixedInteger<>("GpcSegmentType", 2, 1)), + GPC_SEGMENT_INCLUDED(new UnencodableBoolean<>("GpcSegmentIncluded", true)), + GPC(new EncodableBoolean<>("Gpc", false)); + + private final DataType type; + + UsMnField(DataType type) { + this.type = type; + } + + @Override + public DataType getType() { + return type; + } + + public static final FieldNames USMN_CORE_SEGMENT_FIELD_NAMES = + new FieldNames<>( + UsMnField.VERSION, + UsMnField.PROCESSING_NOTICE, + UsMnField.SALE_OPT_OUT_NOTICE, + UsMnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + UsMnField.SALE_OPT_OUT, + UsMnField.TARGETED_ADVERTISING_OPT_OUT, + UsMnField.SENSITIVE_DATA_PROCESSING, + UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + UsMnField.ADDITIONAL_DATA_PROCESSING_CONSENT, + UsMnField.MSPA_COVERED_TRANSACTION, + UsMnField.MSPA_OPT_OUT_OPTION_MODE, + UsMnField.MSPA_SERVICE_PROVIDER_MODE); + + public static final FieldNames USMN_GPC_SEGMENT_FIELD_NAMES = + new FieldNames<>(UsMnField.GPC_SEGMENT_TYPE, UsMnField.GPC_SEGMENT_INCLUDED, UsMnField.GPC); +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java new file mode 100644 index 00000000..6813c3a2 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java @@ -0,0 +1,97 @@ +package com.iab.gpp.encoder.section; + +import com.iab.gpp.encoder.field.UsMnField; +import com.iab.gpp.encoder.segment.Base64Segment; +import java.util.List; + +public class UsMn extends AbstractUsSectionWithGpc { + + public static final int ID = 23; + public static final int VERSION = 1; + public static final String NAME = "usmn"; + + public UsMn() { + super( + new Base64Segment<>(UsMnField.USMN_CORE_SEGMENT_FIELD_NAMES), + new Base64Segment<>(UsMnField.USMN_GPC_SEGMENT_FIELD_NAMES)); + } + + public UsMn(String encodedString) { + this(); + decode(encodedString); + } + + @Override + public int getId() { + return UsMn.ID; + } + + @Override + public String getName() { + return UsMn.NAME; + } + + @Override + public int getVersion() { + return UsMn.VERSION; + } + + @Override + protected final UsMnField getGpcSegmentIncludedKey() { + return UsMnField.GPC_SEGMENT_INCLUDED; + } + + public Integer getProcessingNotice() { + return (Integer) this.getFieldValue(UsMnField.PROCESSING_NOTICE); + } + + public Integer getSaleOptOutNotice() { + return (Integer) this.getFieldValue(UsMnField.SALE_OPT_OUT_NOTICE); + } + + public Integer getTargetedAdvertisingOptOutNotice() { + return (Integer) this.getFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE); + } + + public Integer getSaleOptOut() { + return (Integer) this.getFieldValue(UsMnField.SALE_OPT_OUT); + } + + public Integer getTargetedAdvertisingOptOut() { + return (Integer) this.getFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT); + } + + @SuppressWarnings("unchecked") + public List getSensitiveDataProcessing() { + return (List) this.getFieldValue(UsMnField.SENSITIVE_DATA_PROCESSING); + } + + @SuppressWarnings("unchecked") + public Integer getKnownChildSensitiveDataConsents() { + return (Integer) this.getFieldValue(UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + } + + public Integer getAdditionalDataProcessingConsent() { + return (Integer) this.getFieldValue(UsMnField.ADDITIONAL_DATA_PROCESSING_CONSENT); + } + + public Integer getMspaCoveredTransaction() { + return (Integer) this.getFieldValue(UsMnField.MSPA_COVERED_TRANSACTION); + } + + public Integer getMspaOptOutOptionMode() { + return (Integer) this.getFieldValue(UsMnField.MSPA_OPT_OUT_OPTION_MODE); + } + + public Integer getMspaServiceProviderMode() { + return (Integer) this.getFieldValue(UsMnField.MSPA_SERVICE_PROVIDER_MODE); + } + + public Integer getGpcSegmentType() { + return (Integer) this.getFieldValue(UsMnField.GPC_SEGMENT_TYPE); + } + + public Boolean getGpc() { + return (Boolean) this.getFieldValue(UsMnField.GPC); + } +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index e009c089..95832806 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.field.UsIaField; +import com.iab.gpp.encoder.field.UsMnField; import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.field.UsNeField; @@ -28,6 +29,7 @@ import com.iab.gpp.encoder.section.UsDe; import com.iab.gpp.encoder.section.UsFl; import com.iab.gpp.encoder.section.UsIa; +import com.iab.gpp.encoder.section.UsMn; import com.iab.gpp.encoder.section.UsMt; import com.iab.gpp.encoder.section.UsNat; import com.iab.gpp.encoder.section.UsNe; @@ -125,6 +127,7 @@ public void testEncodeDefaultAll() { gppModel.setFieldValue(UsNh.NAME, UsNhField.VERSION, UsNh.VERSION); gppModel.setFieldValue(UsNj.NAME, UsNjField.VERSION, UsNj.VERSION); gppModel.setFieldValue(UsTn.NAME, UsTnField.VERSION, UsTn.VERSION); + gppModel.setFieldValue(UsMn.NAME, UsMnField.VERSION, UsMn.VERSION); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); @@ -145,10 +148,11 @@ public void testEncodeDefaultAll() { Assertions.assertEquals(true, gppModel.hasSection(UsNh.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UsNj.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UsTn.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsMn.NAME)); String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", + "DBACOYs~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA~BAAAAAQA.QA", gppString); } @@ -424,7 +428,7 @@ public void testDecodeDefaults() { @Test public void testDecodeDefaultsAll() { String gppString = - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA"; + "DBACOYs~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA~BAAAAAABAA.QA"; GppModel gppModel = new GppModel(gppString); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); @@ -446,6 +450,7 @@ public void testDecodeDefaultsAll() { Assertions.assertEquals(true, gppModel.hasSection(UsNh.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UsNj.NAME)); Assertions.assertEquals(true, gppModel.hasSection(UsTn.NAME)); + Assertions.assertEquals(true, gppModel.hasSection(UsMn.NAME)); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java new file mode 100644 index 00000000..02506a39 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java @@ -0,0 +1,174 @@ +package com.iab.gpp.encoder.section; + +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.error.ValidationException; +import com.iab.gpp.encoder.field.UsMnField; +import java.util.Arrays; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class UsMnTest { + + @Test + public void testEncode1() { + UsMn usMn = new UsMn(); + Assertions.assertEquals("BAAAAAQA.QA", usMn.encode()); + } + + @Test + public void testEncode2() { + UsMn usMn = new UsMn(); + + usMn.setFieldValue(UsMnField.PROCESSING_NOTICE, 1); + usMn.setFieldValue(UsMnField.SALE_OPT_OUT_NOTICE, 1); + usMn.setFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 1); + usMn.setFieldValue(UsMnField.SALE_OPT_OUT, 1); + usMn.setFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT, 1); + usMn.setFieldValue(UsMnField.SENSITIVE_DATA_PROCESSING, Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1)); + usMn.setFieldValue(UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 1); + usMn.setFieldValue(UsMnField.ADDITIONAL_DATA_PROCESSING_CONSENT, 1); + usMn.setFieldValue(UsMnField.MSPA_COVERED_TRANSACTION, 1); + usMn.setFieldValue(UsMnField.MSPA_OPT_OUT_OPTION_MODE, 1); + usMn.setFieldValue(UsMnField.MSPA_SERVICE_PROVIDER_MODE, 2); + usMn.setFieldValue(UsMnField.GPC, true); + + Assertions.assertEquals("BVWSSVWA.YA", usMn.encode()); + } + + @Test + public void testSetInvalidValues() { + UsMn usMn = new UsMn(); + + try { + usMn.setFieldValue(UsMnField.PROCESSING_NOTICE, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.SALE_OPT_OUT_NOTICE, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.SALE_OPT_OUT, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT, -1); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue( + UsMnField.SENSITIVE_DATA_PROCESSING, Arrays.asList(0, 1, 2, 3, 1, 2, 0, 1)); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.ADDITIONAL_DATA_PROCESSING_CONSENT, 3); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.MSPA_COVERED_TRANSACTION, 0); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.MSPA_OPT_OUT_OPTION_MODE, 4); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + + try { + usMn.setFieldValue(UsMnField.MSPA_SERVICE_PROVIDER_MODE, -1); + Assertions.fail("Expected ValidationException"); + } catch (ValidationException e) { + + } + } + + @Test + public void testEncodeWithGpcSegmentExcluded() { + UsMn usMn = new UsMn(); + usMn.setFieldValue(UsMnField.GPC_SEGMENT_INCLUDED, false); + Assertions.assertEquals("BAAAAAQA", usMn.encode()); + } + + @Test + public void testDecode1() throws DecodingException { + UsMn usMn = new UsMn("BVWSSVWA.YA"); + + Assertions.assertEquals(1, usMn.getProcessingNotice()); + Assertions.assertEquals(1, usMn.getSaleOptOutNotice()); + Assertions.assertEquals(1, usMn.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usMn.getSaleOptOut()); + Assertions.assertEquals(1, usMn.getTargetedAdvertisingOptOut()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMn.getSensitiveDataProcessing()); + Assertions.assertEquals(1, usMn.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usMn.getAdditionalDataProcessingConsent()); + Assertions.assertEquals(1, usMn.getMspaCoveredTransaction()); + Assertions.assertEquals(1, usMn.getMspaOptOutOptionMode()); + Assertions.assertEquals(2, usMn.getMspaServiceProviderMode()); + Assertions.assertEquals(true, usMn.getGpc()); + } + + @Test + public void testDecodeWithGpcSegmentExcluded() throws DecodingException { + UsMn usMn = new UsMn("BVWSSVWA"); + + Assertions.assertEquals(1, usMn.getProcessingNotice()); + Assertions.assertEquals(1, usMn.getSaleOptOutNotice()); + Assertions.assertEquals(1, usMn.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(1, usMn.getSaleOptOut()); + Assertions.assertEquals(1, usMn.getTargetedAdvertisingOptOut()); + Assertions.assertEquals( + Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usMn.getSensitiveDataProcessing()); + Assertions.assertEquals(1, usMn.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(1, usMn.getAdditionalDataProcessingConsent()); + Assertions.assertEquals(1, usMn.getMspaCoveredTransaction()); + Assertions.assertEquals(1, usMn.getMspaOptOutOptionMode()); + Assertions.assertEquals(2, usMn.getMspaServiceProviderMode()); + Assertions.assertEquals(false, usMn.getGpcSegmentIncluded()); + } + + @Test() + public void testDecodeGarbage() { + Assertions.assertThrows( + DecodingException.class, + () -> { + new UsMn("z").getProcessingNotice(); + }); + } +} From 7ecbbc7e5af1aac732a09fc1d0c637b2c80a71e7 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 19 Feb 2026 15:03:12 -0500 Subject: [PATCH 128/146] seamless support usnatv2 --- .../iab/gpp/encoder/bitstring/BitString.java | 18 +++++ .../com/iab/gpp/encoder/field/UsNatField.java | 81 ++++++++++++++++++- .../com/iab/gpp/encoder/section/UsNat.java | 4 +- .../encoder/segment/SegmentValueProvider.java | 2 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 23 +++--- .../com/iab/gpp/encoder/GppModelTest.java | 10 +-- .../iab/gpp/encoder/section/UsNatTest.java | 33 ++++++-- 7 files changed, 142 insertions(+), 29 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index cd56919f..f876bd04 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -149,6 +149,24 @@ public int readInt(int length) { return bitSet.readInt(from, to); } + // used for usnat v1 to v2 conversion, see note in UsNatCoreSegment + public int peekInt(int length) { + return bitSet.readInt(0, length); + } + + // used for usnat v1 to v2 conversion, see note in UsNatCoreSegment + public void putInt(int value, int length) { + int mask = 1 << length; + if (value >= mask) { + throw new EncodingException( + "Numeric value '" + value + "' is too large for a bit string length of '" + length + "'"); + } + for (int i = 0; i < length; i++) { + mask >>= 1; + bitSet.set(i, (mask & value) != 0); + } + } + public long readLong(int length) { int from = readIndex; int to = from + length; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index b47410e5..3826d034 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,11 +1,18 @@ package com.iab.gpp.encoder.field; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.datatype.AbstractDirtyableBitStringDataType; import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.datatype.UnencodableBoolean; +import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.section.UsNat; +import com.iab.gpp.encoder.segment.EncodableSegment; +import com.iab.gpp.encoder.segment.SegmentValueProvider; +import java.util.List; +import java.util.function.Predicate; public enum UsNatField implements FieldKey { VERSION(new EncodableFixedInteger<>("Version", 6, UsNat.VERSION)), @@ -23,9 +30,14 @@ public enum UsNatField implements FieldKey { TARGETED_ADVERTISING_OPT_OUT( new EncodableFixedInteger<>("TargetedAdvertisingOptOut", 2, 0, VALIDATOR_012)), SENSITIVE_DATA_PROCESSING( - new EncodableFixedIntegerList<>("SensitiveDataProcessing", 2, 16, VALIDATOR_LIST_012)), + new EncodableFlexibleIntegerList( + "SensitiveDataProcessing", 2, new VersionedLengthProvider(12, 16), VALIDATOR_LIST_012)), KNOWN_CHILD_SENSITIVE_DATA_CONSENTS( - new EncodableFixedIntegerList<>("KnownChildSensitiveDataConsents", 2, 3, VALIDATOR_LIST_012)), + new EncodableFlexibleIntegerList( + "KnownChildSensitiveDataConsents", + 2, + new VersionedLengthProvider(2, 3), + VALIDATOR_LIST_012)), PERSONAL_DATA_CONSENTS(new EncodableFixedInteger<>("PersonalDataConsents", 2, 0, VALIDATOR_012)), MSPA_COVERED_TRANSACTION( new EncodableFixedInteger<>("MspaCoveredTransaction", 2, 1, VALIDATOR_12)), @@ -71,4 +83,67 @@ public enum UsNatField implements FieldKey { public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC); + + // used for usnat v1 to v2 conversion, see note in UsNatCoreSegment + private static final class EncodableFlexibleIntegerList + extends AbstractDirtyableBitStringDataType { + + private final int elementBitStringLength; + private final VersionedLengthProvider lengthProvider; + + public EncodableFlexibleIntegerList( + String name, + int elementBitStringLength, + VersionedLengthProvider lengthProvider, + Predicate validator) { + super(name, validator); + this.elementBitStringLength = elementBitStringLength; + + this.lengthProvider = lengthProvider; + } + + @Override + protected FixedIntegerList initialize() { + return new FixedIntegerList(elementBitStringLength, lengthProvider.v2Length); + } + + @Override + protected void encode( + BitString builder, FixedIntegerList value, EncodableSegment segment) { + FixedIntegerListEncoder.encode( + builder, value, this.elementBitStringLength, lengthProvider.extract(segment)); + } + + @Override + protected FixedIntegerList decode(BitString reader, EncodableSegment segment) { + return reader.readFixedIntegerList(elementBitStringLength, lengthProvider.extract(segment)); + } + + @SuppressWarnings("unchecked") + @Override + protected FixedIntegerList processValue(FixedIntegerList oldValue, Object newValue) { + List list = (List) newValue; + int size = list.size(); + for (int i = 0; i < oldValue.size(); i++) { + oldValue.set(i, i < size ? list.get(i) : 0); + } + return oldValue; + } + } + + private static final class VersionedLengthProvider extends SegmentValueProvider { + + private final int v1Length; + private final int v2Length; + + public VersionedLengthProvider(int v1Length, int v2Length) { + super(UsNatField.VERSION); + this.v1Length = v1Length; + this.v2Length = v2Length; + } + + public int modify(int original) { + return original == 1 ? v1Length : v2Length; + } + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 19de1529..e6f07b17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -8,7 +8,7 @@ public class UsNat extends AbstractUsSectionWithGpc { public static final int ID = 7; - public static final int VERSION = 1; + public static final int VERSION = 2; public static final String NAME = "usnat"; public UsNat() { @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsNat.VERSION; + return (Integer) this.getFieldValue(UsNatField.VERSION); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java index dc5368a6..fca1bae7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/SegmentValueProvider.java @@ -14,6 +14,6 @@ public int modify(int original) { } public final int extract(EncodableSegment segment) { - return (Integer) segment.getFieldValueUnsafe(key); + return modify((Integer) segment.getFieldValueUnsafe(key)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index a57fe3d1..c69cb9f4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,36 +1,33 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; +import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.field.UsNatField; public final class UsNatCoreSegment extends AbstractBase64Segment { + private static final int VERSION_LENGTH = 6; + public UsNatCoreSegment() { super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); } protected AbstractBase64UrlEncoder getBase64UrlEncoder() { - return TraditionalBase64UrlEncoder.getInstance(); + return CompressedBase64UrlEncoder.getInstance(); } @Override protected BitString decodeBitString(CharSequence encodedString) { BitString bitString = super.decodeBitString(encodedString); + // An encoder implemented the v2 spec (more fields) while still sending the version as 1. // Necessary to maintain backwards compatibility when sensitive data processing changed from a // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in - // the - // DE, IA, NE, NH, NJ, TN release - if (bitString.length() == 66) { - BitString builder = new BitString(); - - builder.write(bitString, 0, 48); - builder.writeEmpty(8); - builder.write(bitString, 48, 52); - builder.writeEmpty(2); - builder.write(bitString, 52, 62); - bitString = builder; + // the DE, IA, NE, NH, NJ, TN release. + // We use a heuristic of length to determine the v2 strings masquerading as v1 string. + if (bitString.peekInt(VERSION_LENGTH) == 1 && bitString.length() >= 72) { + // Upgrade to version 2 + bitString.putInt(2, VERSION_LENGTH); } return bitString; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index e009c089..4d45c4fe 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -148,7 +148,7 @@ public void testEncodeDefaultAll() { String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", + "DBACOdM~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~CAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA", gppString); } @@ -771,10 +771,10 @@ public void testDecode6() { GppModel gppModel = new GppModel("DBABLA~BAAAAAAAAQA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); Assertions.assertEquals( - Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); Assertions.assertEquals( - Arrays.asList(0, 0, 0), + Arrays.asList(0, 0), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } @@ -795,10 +795,10 @@ public void testDecode8() { GppModel gppModel = new GppModel("DBABLA~BAAAAAABEQA.QA"); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); Assertions.assertEquals( - Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0), + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1), gppModel.getFieldValue(UsNat.NAME, UsNatField.SENSITIVE_DATA_PROCESSING)); Assertions.assertEquals( - Arrays.asList(0, 1, 0), + Arrays.asList(0, 1), gppModel.getFieldValue(UsNat.NAME, UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS)); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java index ec549ad4..d5357886 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java @@ -13,7 +13,7 @@ public class UsNatTest { public void testEncode1() { UsNat usNat = new UsNat(); - Assertions.assertEquals("BAAAAAAAAABA.QA", usNat.encode()); + Assertions.assertEquals("CAAAAAAAAABA.QA", usNat.encode()); } @Test @@ -39,7 +39,7 @@ public void testEncode2() { usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 2); usNat.setFieldValue(UsNatField.GPC, true); - Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode()); + Assertions.assertEquals("CVVVkkkkkpFY.YA", usNat.encode()); } @Test @@ -176,7 +176,7 @@ public void testEncode3() { usNat.setFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE, 2); usNat.setFieldValue(UsNatField.GPC, true); - Assertions.assertEquals("BVVVkkkkkpFY.YA", usNat.encode()); + Assertions.assertEquals("CVVVkkkkkpFY.YA", usNat.encode()); } @Test @@ -184,12 +184,12 @@ public void testEncodeWithGpcSegmentIncluded() { UsNat usNat = new UsNat(); usNat.setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); - Assertions.assertEquals("BAAAAAAAAABA", usNat.encode()); + Assertions.assertEquals("CAAAAAAAAABA", usNat.encode()); } @Test public void testDecode1() throws DecodingException { - UsNat usNat = new UsNat("BVVVkkkkkpFY.YA"); + UsNat usNat = new UsNat("CVVVkkkkkpFY.YA"); Assertions.assertEquals(1, usNat.getSharingNotice()); Assertions.assertEquals(1, usNat.getSaleOptOutNotice()); @@ -235,6 +235,29 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { Assertions.assertEquals(false, usNat.getGpcSegmentIncluded()); } + @Test + public void testDecodeBackwardsCompatibility() throws DecodingException { + UsNat usNat = new UsNat("BVQqAAAACg"); + + Assertions.assertEquals(1, usNat.getSharingNotice()); + Assertions.assertEquals(1, usNat.getSaleOptOutNotice()); + Assertions.assertEquals(1, usNat.getSharingOptOutNotice()); + Assertions.assertEquals(1, usNat.getTargetedAdvertisingOptOutNotice()); + Assertions.assertEquals(0, usNat.getSensitiveDataProcessingOptOutNotice()); + Assertions.assertEquals(0, usNat.getSensitiveDataLimitUseNotice()); + Assertions.assertEquals(2, usNat.getSaleOptOut()); + Assertions.assertEquals(2, usNat.getSharingOptOut()); + Assertions.assertEquals(2, usNat.getTargetedAdvertisingOptOut()); + Assertions.assertEquals( + Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), usNat.getSensitiveDataProcessing()); + Assertions.assertEquals(Arrays.asList(0, 0), usNat.getKnownChildSensitiveDataConsents()); + Assertions.assertEquals(2, usNat.getPersonalDataConsents()); + Assertions.assertEquals(2, usNat.getMspaCoveredTransaction()); + Assertions.assertEquals(0, usNat.getMspaOptOutOptionMode()); + Assertions.assertEquals(0, usNat.getMspaServiceProviderMode()); + Assertions.assertEquals(false, usNat.getGpc()); + } + @Test() public void testDecodeGarbage() { Assertions.assertThrows( From 32e3a5fa8d00b12b2dc44dccddbf9fa4a99c61bc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 26 Feb 2026 15:49:52 -0500 Subject: [PATCH 129/146] clean up mn --- .../src/main/java/com/iab/gpp/encoder/section/UsMn.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java index 6813c3a2..eab08473 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMnField; import com.iab.gpp.encoder.segment.Base64Segment; -import java.util.List; public class UsMn extends AbstractUsSectionWithGpc { @@ -61,12 +61,10 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsMnField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsMnField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsMnField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") public Integer getKnownChildSensitiveDataConsents() { return (Integer) this.getFieldValue(UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } From 04eb295002ed7201f0f1ccff65cafab7a7a8e1cf Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 26 Mar 2026 11:24:56 -0400 Subject: [PATCH 130/146] clean up support for optional segments --- .../java/com/iab/gpp/encoder/GppModel.java | 8 ++-- .../AbstractDirtyableBitStringDataType.java | 3 ++ .../iab/gpp/encoder/datatype/DataType.java | 10 ++++ .../EncodableArrayOfFixedIntegerRanges.java | 5 ++ .../EncodableFibonacciIntegerRange.java | 5 ++ .../datatype/EncodableFixedBitfield.java | 5 ++ .../datatype/EncodableFixedIntegerList.java | 5 ++ .../datatype/EncodableFixedIntegerRange.java | 5 ++ .../datatype/EncodableFlexibleBitfield.java | 5 ++ .../EncodableOptimizedFixedRange.java | 5 ++ .../encoder/datatype/FixedIntegerList.java | 11 +++++ .../com/iab/gpp/encoder/field/UsNatField.java | 5 ++ .../section/AbstractUsSectionWithGpc.java | 2 - .../com/iab/gpp/encoder/section/TcfCaV1.java | 2 +- .../com/iab/gpp/encoder/section/UsCa.java | 6 +-- .../com/iab/gpp/encoder/section/UsCo.java | 6 +-- .../com/iab/gpp/encoder/section/UsCt.java | 6 +-- .../com/iab/gpp/encoder/section/UsDe.java | 6 +-- .../com/iab/gpp/encoder/section/UsFl.java | 2 +- .../com/iab/gpp/encoder/section/UsIa.java | 6 +-- .../com/iab/gpp/encoder/section/UsMn.java | 6 +-- .../com/iab/gpp/encoder/section/UsMt.java | 6 +-- .../com/iab/gpp/encoder/section/UsNat.java | 4 -- .../com/iab/gpp/encoder/section/UsNe.java | 6 +-- .../com/iab/gpp/encoder/section/UsNh.java | 6 +-- .../com/iab/gpp/encoder/section/UsNj.java | 6 +-- .../com/iab/gpp/encoder/section/UsOr.java | 6 +-- .../com/iab/gpp/encoder/section/UsTn.java | 6 +-- .../com/iab/gpp/encoder/section/UsTx.java | 6 +-- .../com/iab/gpp/encoder/section/UsUt.java | 2 +- .../com/iab/gpp/encoder/section/UsVa.java | 2 +- .../segment/AbstractBase64Segment.java | 4 +- .../AbstractLazilyEncodableSegment.java | 18 ++++++- .../gpp/encoder/segment/Base64Segment.java | 6 ++- .../gpp/encoder/segment/EncodableSegment.java | 2 + .../segment/TraditionalBase64Segment.java | 8 +++- .../gpp/encoder/segment/UsNatCoreSegment.java | 2 +- .../gpp/encoder/segment/UspV1CoreSegment.java | 2 +- .../com/iab/gpp/encoder/GppModelTest.java | 48 +++++++++---------- .../iab/gpp/encoder/section/TcfCaV1Test.java | 3 ++ .../com/iab/gpp/encoder/section/UsCaTest.java | 2 + .../com/iab/gpp/encoder/section/UsCoTest.java | 1 + .../com/iab/gpp/encoder/section/UsCtTest.java | 1 + .../com/iab/gpp/encoder/section/UsDeTest.java | 1 + .../com/iab/gpp/encoder/section/UsFlTest.java | 1 + .../com/iab/gpp/encoder/section/UsIaTest.java | 1 + .../com/iab/gpp/encoder/section/UsMnTest.java | 1 + .../com/iab/gpp/encoder/section/UsMtTest.java | 1 + .../iab/gpp/encoder/section/UsNatTest.java | 3 ++ .../com/iab/gpp/encoder/section/UsNeTest.java | 1 + .../com/iab/gpp/encoder/section/UsNhTest.java | 1 + .../com/iab/gpp/encoder/section/UsNjTest.java | 1 + .../com/iab/gpp/encoder/section/UsOrTest.java | 1 + .../com/iab/gpp/encoder/section/UsTnTest.java | 1 + .../com/iab/gpp/encoder/section/UsTxTest.java | 1 + .../com/iab/gpp/encoder/section/UsUtTest.java | 2 + .../com/iab/gpp/encoder/section/UsVaTest.java | 1 + 57 files changed, 168 insertions(+), 110 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 0a2f2941..a55c9ab6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder; +import com.iab.gpp.encoder.datatype.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; @@ -43,7 +44,8 @@ public class GppModel extends AbstractEncodable { static { List>> constructors = new ArrayList<>(); - // register section constructors here + // ADDING A NEW SECTION: + // register section constructors here and add get*Section() method below constructors.add(TcfEuV2::new); constructors.add(TcfCaV1::new); constructors.add(UspV1::new); @@ -263,9 +265,9 @@ public UsMn getUsMnSection() { return (UsMn) getSection(UsMn.ID); } - public List getSectionIds() { + public IntegerSet getSectionIds() { ensureDecode(); - return new ArrayList<>(header.getSectionsIds()); + return header.getSectionsIds(); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java index 3d0c51b1..bbfbfea4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -19,6 +19,9 @@ public boolean isDirty(Object[] values, int index) { return (value != null && value.isDirty()); } + @Override + protected abstract boolean isPresent(T value); + @SuppressWarnings("unchecked") @Override public void setDirty(Object[] values, int index, boolean dirty) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 92c6e3d0..e93944ee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -69,6 +69,16 @@ public final T get(Object[] values, int index) { return value; } + @SuppressWarnings("unchecked") + public final boolean isPresent(Object[] values, int index) { + T value = (T) values[index]; + return value != null && isPresent(value); + } + + protected boolean isPresent(T value) { + return true; + } + public final void set(Object[] values, int index, Object newValue) { T oldValue = get(values, index); T effectiveValue = processValue(oldValue, newValue); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 81bccc51..f01470e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -29,6 +29,11 @@ protected DirtyableList initialize() { return new DirtyableList<>(); } + @Override + protected boolean isPresent(DirtyableList value) { + return !value.isEmpty(); + } + @Override protected void encode( BitString sb, DirtyableList entries, EncodableSegment segment) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index c1d0ba79..7ac2ffd2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -18,6 +18,11 @@ public IntegerSet initialize() { return new IntegerSet(); } + @Override + protected boolean isPresent(IntegerSet value) { + return !value.isEmpty(); + } + @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { FibonacciIntegerRangeEncoder.encode(builder, value); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index ffb2dda9..a22eb31b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -26,6 +26,11 @@ protected IntegerSet initialize() { return new IntegerSet(numElements); } + @Override + protected boolean isPresent(IntegerSet value) { + return !value.isEmpty(); + } + @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { FixedBitfieldEncoder.encode(builder, value, this.numElements); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 57d05985..a0ced76d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -33,6 +33,11 @@ protected FixedIntegerList initialize() { return new FixedIntegerList(elementBitStringLength, numElements); } + @Override + protected boolean isPresent(FixedIntegerList value) { + return value.isPresent(); + } + @Override protected void encode(BitString builder, FixedIntegerList value, EncodableSegment segment) { FixedIntegerListEncoder.encode(builder, value, this.elementBitStringLength, this.numElements); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index ec844895..51f37ffd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -18,6 +18,11 @@ protected IntegerSet initialize() { return new IntegerSet(); } + @Override + protected boolean isPresent(IntegerSet value) { + return !value.isEmpty(); + } + @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { FixedIntegerRangeEncoder.encode(builder, value); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 88b7118b..a0a05742 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -22,6 +22,11 @@ protected IntegerSet initialize() { return new IntegerSet(); } + @Override + protected boolean isPresent(IntegerSet value) { + return !value.isEmpty(); + } + @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { FixedBitfieldEncoder.encode(builder, value, this.getLengthSupplier.extract(segment)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 90a3ed92..b333b244 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -18,6 +18,11 @@ protected IntegerSet initialize() { return new IntegerSet(); } + @Override + protected boolean isPresent(IntegerSet value) { + return !value.isEmpty(); + } + @Override protected void encode(BitString builder, IntegerSet value, EncodableSegment segment) { OptimizedFixedRangeEncoder.encode(builder, value); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index 36486cb1..99778d41 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -26,6 +26,17 @@ public FixedIntegerList(int elementBitStringLength, int numElements) { this(new BitSet(elementBitStringLength * numElements), 0, elementBitStringLength, numElements); } + public boolean isPresent() { + int start = offset; + int end = start + elementBitStringLength * numElements; + for (int i = start; i < end; i++) { + if (bitSet.get(i)) { + return true; + } + } + return false; + } + @Override public int size() { return numElements; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 3826d034..482d6620 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -107,6 +107,11 @@ protected FixedIntegerList initialize() { return new FixedIntegerList(elementBitStringLength, lengthProvider.v2Length); } + @Override + protected boolean isPresent(FixedIntegerList value) { + return value.isPresent(); + } + @Override protected void encode( BitString builder, FixedIntegerList value, EncodableSegment segment) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java index 2fce4634..3a0ef103 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractUsSectionWithGpc.java @@ -46,8 +46,6 @@ protected final CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } - public abstract Integer getGpcSegmentType(); - public Boolean getGpcSegmentIncluded() { return (Boolean) getSegment(1).getFieldValue(getGpcSegmentIncludedKey()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index fc14c315..e936db5f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -39,7 +39,7 @@ public String getName() { @Override public int getVersion() { - return TcfCaV1.VERSION; + return (Integer) this.getFieldValue(TcfCaV1Field.VERSION); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index c51eb0da..3be8efd1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsCa.VERSION; + return (Integer) this.getFieldValue(UsCaField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsCaField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsCaField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsCaField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 63f6de51..7e11bb82 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsCo.VERSION; + return (Integer) this.getFieldValue(UsCoField.VERSION); } @Override @@ -81,10 +81,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsCoField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsCoField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsCoField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 5d1cdddc..6c037f63 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsCt.VERSION; + return (Integer) this.getFieldValue(UsCtField.VERSION); } @Override @@ -81,10 +81,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsCtField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsCtField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsCtField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 8fb0888e..13402b5c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsDe.VERSION; + return (Integer) this.getFieldValue(UsDeField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsDeField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsDeField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsDeField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index c967faf7..e9714b68 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -31,7 +31,7 @@ public String getName() { @Override public int getVersion() { - return UsFl.VERSION; + return (Integer) this.getFieldValue(UsFlField.VERSION); } public Integer getProcessingNotice() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 918066b6..601ff1ac 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsIa.VERSION; + return (Integer) this.getFieldValue(UsIaField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsIaField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsIaField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsIaField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java index eab08473..37626f86 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMn.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsMn.VERSION; + return (Integer) this.getFieldValue(UsMnField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsMnField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsMnField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsMnField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 972f661b..0bc1bc2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsMt.VERSION; + return (Integer) this.getFieldValue(UsMtField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsMtField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsMtField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsMtField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index e6f07b17..6f48947e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -101,10 +101,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsNatField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsNatField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNatField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 5b6beb26..8902b24b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsNe.VERSION; + return (Integer) this.getFieldValue(UsNeField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsNeField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsNeField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNeField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 413357a4..67f237eb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsNh.VERSION; + return (Integer) this.getFieldValue(UsNhField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsNhField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsNhField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNhField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 2e996507..763d51fb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsNj.VERSION; + return (Integer) this.getFieldValue(UsNjField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsNjField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsNjField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsNjField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index ddd2be6e..d35624a0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsOr.VERSION; + return (Integer) this.getFieldValue(UsOrField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsOrField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsOrField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsOrField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 89cf9842..4a48a236 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsTn.VERSION; + return (Integer) this.getFieldValue(UsTnField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsTnField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsTnField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsTnField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 40bac9d1..cd622eb0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -33,7 +33,7 @@ public String getName() { @Override public int getVersion() { - return UsTx.VERSION; + return (Integer) this.getFieldValue(UsTxField.VERSION); } @Override @@ -85,10 +85,6 @@ public Integer getMspaServiceProviderMode() { return (Integer) this.getFieldValue(UsTxField.MSPA_SERVICE_PROVIDER_MODE); } - public Integer getGpcSegmentType() { - return (Integer) this.getFieldValue(UsTxField.GPC_SEGMENT_TYPE); - } - public Boolean getGpc() { return (Boolean) this.getFieldValue(UsTxField.GPC); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 4c81876f..3d9731d5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -31,7 +31,7 @@ public String getName() { @Override public int getVersion() { - return UsUt.VERSION; + return (Integer) this.getFieldValue(UsUtField.VERSION); } public Integer getSharingNotice() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 8b8eec58..148283b9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -31,7 +31,7 @@ public String getName() { @Override public int getVersion() { - return UsVa.VERSION; + return (Integer) this.getFieldValue(UsVaField.VERSION); } public Integer getSharingNotice() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 090651a2..ce5fc8d3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -11,8 +11,8 @@ abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment { - protected AbstractBase64Segment(FieldNames fieldNames) { - super(fieldNames); + protected AbstractBase64Segment(FieldNames fieldNames, boolean optional) { + super(fieldNames, optional); } protected abstract AbstractBase64UrlEncoder getBase64UrlEncoder(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index e6386caa..1e15d282 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -10,10 +10,26 @@ abstract class AbstractLazilyEncodableSegment & FieldKey> protected final FieldNames fieldNames; protected final Object[] values; private boolean dirty; + private final boolean optional; - protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { + protected AbstractLazilyEncodableSegment(FieldNames fieldNames, boolean optional) { this.fieldNames = fieldNames; this.values = new Object[fieldNames.size()]; + this.optional = optional; + } + + @Override + public boolean shouldEncode() { + if (!optional) { + return true; + } + int size = fieldNames.size(); + for (int i = 0; i < size; i++) { + if (fieldNames.get(i).isPresent(values, i)) { + return true; + } + } + return false; } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java index 181e187a..c5aff710 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/Base64Segment.java @@ -7,8 +7,12 @@ public final class Base64Segment & FieldKey> extends AbstractBase64Segment { + public Base64Segment(FieldNames fieldNames, boolean optional) { + super(fieldNames, optional); + } + public Base64Segment(FieldNames fieldNames) { - super(fieldNames); + this(fieldNames, false); } protected AbstractBase64UrlEncoder getBase64UrlEncoder() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 30654a43..4cf3463d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -13,4 +13,6 @@ public abstract class EncodableSegment & FieldKey> extends Abs protected abstract Object getFieldValueUnsafe(E key); public abstract void setFieldValue(E fieldName, Object value); + + public abstract boolean shouldEncode(); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java index 5b2610be..4f1432b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TraditionalBase64Segment.java @@ -8,11 +8,15 @@ public final class TraditionalBase64Segment & FieldKey> extends AbstractBase64Segment { + public TraditionalBase64Segment(FieldNames fieldNames, boolean optional) { + super(fieldNames, optional); + } + public TraditionalBase64Segment(FieldNames fieldNames) { - super(fieldNames); + this(fieldNames, false); } - protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + protected final AbstractBase64UrlEncoder getBase64UrlEncoder() { return TraditionalBase64UrlEncoder.getInstance(); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index c69cb9f4..0907035c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -10,7 +10,7 @@ public final class UsNatCoreSegment extends AbstractBase64Segment { private static final int VERSION_LENGTH = 6; public UsNatCoreSegment() { - super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); + super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES, false); } protected AbstractBase64UrlEncoder getBase64UrlEncoder() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 9defd655..b845f925 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -6,7 +6,7 @@ public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment { public UspV1CoreSegment() { - super(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); + super(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES, false); } @Override diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index d4444857..19fabe27 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -44,7 +44,6 @@ import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; @@ -70,7 +69,7 @@ public void testEncodeDefault() { String gppString = gppModel.encode(); Assertions.assertEquals("DBAA", gppString); - Assertions.assertEquals(new ArrayList<>(), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(), gppModel.getSectionIds()); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.ID)); @@ -152,7 +151,7 @@ public void testEncodeDefaultAll() { String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOYs~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~CAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA~BAAAAAQA.QA", + "DBACOYs~CPSG_8APSG_8AAAAAAENAAFgAAAAAAAAAAAAAAAAAAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~CAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA~BAAAAAQA.QA", gppString); } @@ -189,7 +188,7 @@ public void testEncodeUspv1() { gppModel.setFieldValue(UspV1.NAME, UspV1Field.OPT_OUT_SALE, 'N'); gppModel.setFieldValue(UspV1.NAME, UspV1Field.LSPA_COVERED, 'N'); - Assertions.assertEquals(Arrays.asList(6), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(6), gppModel.getSectionIds()); Assertions.assertEquals(true, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.ID)); @@ -200,8 +199,11 @@ public void testEncodeUspv1() { String gppString = gppModel.encode(); Assertions.assertEquals("DBABTA~1YNN", gppString); + Assertions.assertEquals("1YNN", gppModel.encodeSection(UspV1.ID)); + Assertions.assertEquals("1YNN", gppModel.encodeSection(UspV1.NAME)); - Assertions.assertEquals(Arrays.asList(6), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(6), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(6), gppModel.getHeader().getSectionsIds()); Assertions.assertEquals(true, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.ID)); @@ -235,7 +237,7 @@ public void testEncodeTcfEuV2() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); - Assertions.assertEquals(Arrays.asList(2), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(2), gppModel.getSectionIds()); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.ID)); @@ -245,12 +247,11 @@ public void testEncodeTcfEuV2() { Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); String gppString = gppModel.encode(); - Assertions.assertEquals( - "DBABMA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", gppString); + Assertions.assertEquals("DBABMA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.IAAA", gppString); Assertions.assertEquals(2, gppString.split("~").length); - Assertions.assertEquals(Arrays.asList(2), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(2), gppModel.getSectionIds()); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.ID)); @@ -280,7 +281,7 @@ public void testEncodeUspV1AndTcfEuV2() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); - Assertions.assertEquals(Arrays.asList(2), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(2), gppModel.getSectionIds()); Assertions.assertEquals(false, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); @@ -295,11 +296,11 @@ public void testEncodeUspV1AndTcfEuV2() { String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACNYA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~1YNN", gppString); + "DBACNYA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.IAAA~1YNN", gppString); Assertions.assertEquals(3, gppString.split("~").length); - Assertions.assertEquals(Arrays.asList(2, 6), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(2, 6), gppModel.getSectionIds()); Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.NAME)); @@ -329,7 +330,7 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.CREATED, utcDateTime); gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); - Assertions.assertEquals(Arrays.asList(2), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(2), gppModel.getSectionIds()); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.ID)); @@ -396,12 +397,12 @@ public void testEncodeUspV1AndTcfEuV2AndTcfCaV1() { String gppString = gppModel.encode(); Assertions.assertEquals( - "DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN", + "DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN", gppString); Assertions.assertEquals(4, gppString.split("~").length); - Assertions.assertEquals(Arrays.asList(2, 5, 6), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(2, 5, 6), gppModel.getSectionIds()); Assertions.assertEquals(true, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.ID)); @@ -428,7 +429,7 @@ public void testDecodeDefaults() { @Test public void testDecodeDefaultsAll() { String gppString = - "DBACOYs~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~BAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA~BAAAAAABAA.QA"; + "DBACOcGA~CPSG_8APSG_8AAAAAAENAAFgAAAAAAAAAAAAAAAAAAAA.IAAA~BPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA~1---~CAAAAAAAAABA.QA~BAAAAABA.QA~BAAAABA~BAAAAEA.QA~BAAAAAQA~BAAAAAEA.QA~BAAAAABA~BAAAAABA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAABAA.QA~BAAAAAQA.QA~BAAAAAQA.QA~BAAAAABA.QA~BAAAAAAAQA.QA~BAAAAAQA.QA~BAAAAAQA.QA~YBAA.AQAA~ZBAA.AQAA~aBAA.AQAA~bBAA.AQAA"; GppModel gppModel = new GppModel(gppString); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); @@ -458,7 +459,7 @@ public void testDecodeUspv1() { String gppString = "DBABTA~1YNN"; GppModel gppModel = new GppModel(gppString); - Assertions.assertEquals(Arrays.asList(6), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(6), gppModel.getSectionIds()); Assertions.assertEquals(true, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.ID)); @@ -481,7 +482,7 @@ public void testDecodeTcfEuV2() { String gppString = "DBABMA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA"; GppModel gppModel = new GppModel(gppString); - Assertions.assertEquals(Arrays.asList(2), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(2), gppModel.getSectionIds()); Assertions.assertEquals(false, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.ID)); @@ -539,7 +540,7 @@ public void testDecodeUspv1AndTcfEuV2() { String gppString = "DBACNYA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~1YNN"; GppModel gppModel = new GppModel(gppString); - Assertions.assertEquals(Arrays.asList(2, 6), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(2, 6), gppModel.getSectionIds()); Assertions.assertEquals(true, gppModel.hasSection(UspV1.ID)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.ID)); Assertions.assertEquals(false, gppModel.hasSection(TcfCaV1.ID)); @@ -618,7 +619,7 @@ public void testDecodeUspv1AndTcfEuV2AndTcfCaV1() { "DBACOeA~CPSG_8APSG_8ANwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA~BPSG_8APSG_8AAyACAENGdCgf_gfgAfgfgBgABABAAABAB4AACACAAA.fHHHA4444ao~1YNN"; GppModel gppModel = new GppModel(gppString); - Assertions.assertEquals(Arrays.asList(2, 5, 6), gppModel.getSectionIds()); + Assertions.assertEquals(Set.of(2, 5, 6), gppModel.getSectionIds()); Assertions.assertEquals(true, gppModel.hasSection(UspV1.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfEuV2.NAME)); Assertions.assertEquals(true, gppModel.hasSection(TcfCaV1.NAME)); @@ -707,7 +708,7 @@ public void testEncode1() { gppModel.toString(); Assertions.assertEquals( - "DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOAAAABAAAAA.QAAA.IAAA", gppModel.encode()); + "DBABMA~CPSG_8APSG_8AAAAAAENAAFgAAAAAAAAAAAAAOAAAABAAAAA.IAAA", gppModel.encode()); } @Test @@ -719,7 +720,7 @@ public void testEncode2() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); Assertions.assertEquals( - "DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAOwAQAOgAAAA.QAAA.IAAA", gppModel.encode()); + "DBABMA~CPSG_8APSG_8AAAAAAENAAFgAAAAAAAAAAAAAOwAQAOgAAAA.IAAA", gppModel.encode()); } @Test @@ -731,8 +732,7 @@ public void testEncode3() { gppModel.setFieldValue(TcfEuV2.NAME, TcfEuV2Field.LAST_UPDATED, utcDateTime); Assertions.assertEquals( - "DBABMA~CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.QAAA.IAAA", - gppModel.encode()); + "DBABMA~CPSG_8APSG_8AAAAAAENAAFgAAAAAAAAAAAAFpQAwAAgCtAWkAAAAAAA.IAAA", gppModel.encode()); } @Test diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java index 60392396..9c184d51 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfCaV1Test.java @@ -114,6 +114,9 @@ public void testDecode1() { Assertions.assertEquals(0, tcfCaV1.getCmpId()); Assertions.assertEquals(0, tcfCaV1.getCmpVersion()); Assertions.assertEquals(0, tcfCaV1.getVendorListVersion()); + Assertions.assertEquals(0, tcfCaV1.getConsentScreen()); + Assertions.assertEquals(2, tcfCaV1.getPolicyVersion()); + Assertions.assertEquals(1, tcfCaV1.getVersion()); Assertions.assertEquals(false, tcfCaV1.getUseNonStandardStacks()); Assertions.assertEquals(Set.of(), tcfCaV1.getSpecialFeatureExpressConsent()); Assertions.assertEquals(Set.of(), tcfCaV1.getPurposesExpressConsent()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java index 3ef79752..cd9e54cb 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCaTest.java @@ -153,8 +153,10 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() { UsCa usCa = new UsCa("BVWSSSVY.YA"); + Assertions.assertEquals(1, usCa.getVersion()); Assertions.assertEquals(1, usCa.getSaleOptOutNotice()); Assertions.assertEquals(1, usCa.getSharingOptOut()); + Assertions.assertEquals(1, usCa.getSharingOptOutNotice()); Assertions.assertEquals(1, usCa.getSensitiveDataLimitUseNotice()); Assertions.assertEquals(1, usCa.getSaleOptOut()); Assertions.assertEquals(1, usCa.getSharingOptOut()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java index 38d62643..79f337ce 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCoTest.java @@ -120,6 +120,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() { UsCo usCo = new UsCo("BVWSSVg.YA"); + Assertions.assertEquals(1, usCo.getVersion()); Assertions.assertEquals(1, usCo.getSharingNotice()); Assertions.assertEquals(1, usCo.getSaleOptOutNotice()); Assertions.assertEquals(1, usCo.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java index 1dd4877e..75647697 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsCtTest.java @@ -121,6 +121,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsCt usCt = new UsCt("BVWSSZFg.YA"); + Assertions.assertEquals(1, usCt.getVersion()); Assertions.assertEquals(1, usCt.getSharingNotice()); Assertions.assertEquals(1, usCt.getSaleOptOutNotice()); Assertions.assertEquals(1, usCt.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java index dfc6c081..93f49a4a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsDeTest.java @@ -130,6 +130,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsDe usDe = new UsDe("BVWSSSSVYA.YA"); + Assertions.assertEquals(1, usDe.getVersion()); Assertions.assertEquals(1, usDe.getProcessingNotice()); Assertions.assertEquals(1, usDe.getSaleOptOutNotice()); Assertions.assertEquals(1, usDe.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java index fe4158ad..e8cf21f4 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsFlTest.java @@ -128,6 +128,7 @@ public void testSetInvalidValues() { public void testDecode1() throws DecodingException { UsFl usFl = new UsFl("BVWSSZlY"); + Assertions.assertEquals(1, usFl.getVersion()); Assertions.assertEquals(1, usFl.getProcessingNotice()); Assertions.assertEquals(1, usFl.getSaleOptOutNotice()); Assertions.assertEquals(1, usFl.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java index 6bd6b053..178de70c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsIaTest.java @@ -129,6 +129,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsIa usIa = new UsIa("BVVkklWA.YA"); + Assertions.assertEquals(1, usIa.getVersion()); Assertions.assertEquals(1, usIa.getProcessingNotice()); Assertions.assertEquals(1, usIa.getSaleOptOutNotice()); Assertions.assertEquals(1, usIa.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java index 02506a39..42501379 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMnTest.java @@ -129,6 +129,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsMn usMn = new UsMn("BVWSSVWA.YA"); + Assertions.assertEquals(1, usMn.getVersion()); Assertions.assertEquals(1, usMn.getProcessingNotice()); Assertions.assertEquals(1, usMn.getSaleOptOutNotice()); Assertions.assertEquals(1, usMn.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java index 8e951bd1..8f18c393 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsMtTest.java @@ -129,6 +129,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsMt usMt = new UsMt("BVWSSZFY.YA"); + Assertions.assertEquals(1, usMt.getVersion()); Assertions.assertEquals(1, usMt.getSharingNotice()); Assertions.assertEquals(1, usMt.getSaleOptOutNotice()); Assertions.assertEquals(1, usMt.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java index d5357886..5c5322f9 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNatTest.java @@ -191,6 +191,7 @@ public void testEncodeWithGpcSegmentIncluded() { public void testDecode1() throws DecodingException { UsNat usNat = new UsNat("CVVVkkkkkpFY.YA"); + Assertions.assertEquals(2, usNat.getVersion()); Assertions.assertEquals(1, usNat.getSharingNotice()); Assertions.assertEquals(1, usNat.getSaleOptOutNotice()); Assertions.assertEquals(1, usNat.getSharingOptOutNotice()); @@ -215,6 +216,7 @@ public void testDecode1() throws DecodingException { public void testDecodeWithGpcSegmentExcluded() throws DecodingException { UsNat usNat = new UsNat("BVVVkkkkkpFY"); + Assertions.assertEquals(2, usNat.getVersion()); Assertions.assertEquals(1, usNat.getSharingNotice()); Assertions.assertEquals(1, usNat.getSaleOptOutNotice()); Assertions.assertEquals(1, usNat.getSharingOptOutNotice()); @@ -239,6 +241,7 @@ public void testDecodeWithGpcSegmentExcluded() throws DecodingException { public void testDecodeBackwardsCompatibility() throws DecodingException { UsNat usNat = new UsNat("BVQqAAAACg"); + Assertions.assertEquals(1, usNat.getVersion()); Assertions.assertEquals(1, usNat.getSharingNotice()); Assertions.assertEquals(1, usNat.getSaleOptOutNotice()); Assertions.assertEquals(1, usNat.getSharingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java index 10b6e816..a8926c9d 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNeTest.java @@ -129,6 +129,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsNe usNe = new UsNe("BVWSSVWA.YA"); + Assertions.assertEquals(1, usNe.getVersion()); Assertions.assertEquals(1, usNe.getProcessingNotice()); Assertions.assertEquals(1, usNe.getSaleOptOutNotice()); Assertions.assertEquals(1, usNe.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java index 805166c3..41e466f5 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNhTest.java @@ -129,6 +129,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsNh usNh = new UsNh("BVWSSZFY.YA"); + Assertions.assertEquals(1, usNh.getVersion()); Assertions.assertEquals(1, usNh.getProcessingNotice()); Assertions.assertEquals(1, usNh.getSaleOptOutNotice()); Assertions.assertEquals(1, usNh.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java index b32b0cee..14deba8a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsNjTest.java @@ -130,6 +130,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsNj usNj = new UsNj("BVWSSRklWA.YA"); + Assertions.assertEquals(1, usNj.getVersion()); Assertions.assertEquals(1, usNj.getProcessingNotice()); Assertions.assertEquals(1, usNj.getSaleOptOutNotice()); Assertions.assertEquals(1, usNj.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java index 3a78e62c..20a78202 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsOrTest.java @@ -130,6 +130,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsOr usOr = new UsOr("BVWSSRpFYA.YA"); + Assertions.assertEquals(1, usOr.getVersion()); Assertions.assertEquals(1, usOr.getProcessingNotice()); Assertions.assertEquals(1, usOr.getSaleOptOutNotice()); Assertions.assertEquals(1, usOr.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java index 79aa5ff1..c8b477fc 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTnTest.java @@ -129,6 +129,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsTn usTn = new UsTn("BVWSSVWA.YA"); + Assertions.assertEquals(1, usTn.getVersion()); Assertions.assertEquals(1, usTn.getProcessingNotice()); Assertions.assertEquals(1, usTn.getSaleOptOutNotice()); Assertions.assertEquals(1, usTn.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java index 28a4ef45..8c0aa931 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsTxTest.java @@ -129,6 +129,7 @@ public void testEncodeWithGpcSegmentExcluded() { public void testDecode1() throws DecodingException { UsTx usTx = new UsTx("BVWSSVWA.YA"); + Assertions.assertEquals(1, usTx.getVersion()); Assertions.assertEquals(1, usTx.getProcessingNotice()); Assertions.assertEquals(1, usTx.getSaleOptOutNotice()); Assertions.assertEquals(1, usTx.getTargetedAdvertisingOptOutNotice()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java index 3ad6dc06..20c3e7f3 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsUtTest.java @@ -121,10 +121,12 @@ public void testSetInvalidValues() { public void testDecode1() throws DecodingException { UsUt usUt = new UsUt("BVVkklWA"); + Assertions.assertEquals(1, usUt.getVersion()); Assertions.assertEquals(1, usUt.getSharingNotice()); Assertions.assertEquals(1, usUt.getSaleOptOutNotice()); Assertions.assertEquals(1, usUt.getTargetedAdvertisingOptOutNotice()); Assertions.assertEquals(1, usUt.getSaleOptOut()); + Assertions.assertEquals(1, usUt.getSensitiveDataProcessingOptOutNotice()); Assertions.assertEquals(1, usUt.getTargetedAdvertisingOptOut()); Assertions.assertEquals( Arrays.asList(2, 1, 0, 2, 1, 0, 2, 1), usUt.getSensitiveDataProcessing()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java index 06025a47..afea3f8d 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UsVaTest.java @@ -120,6 +120,7 @@ public void testSetInvalidValues() { public void testDecode1() throws DecodingException { UsVa usVa = new UsVa("BVWSSVY"); + Assertions.assertEquals(1, usVa.getVersion()); Assertions.assertEquals(1, usVa.getSharingNotice()); Assertions.assertEquals(1, usVa.getSaleOptOutNotice()); Assertions.assertEquals(1, usVa.getTargetedAdvertisingOptOutNotice()); From d14a86b9b8ff5ebdadec9fed1e939fbb47e33006 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 26 Mar 2026 11:25:05 -0400 Subject: [PATCH 131/146] tcf 2.3 support --- .../iab/gpp/encoder/field/TcfEuV2Field.java | 4 +-- .../com/iab/gpp/encoder/section/TcfEuV2.java | 33 +++++++------------ .../iab/gpp/encoder/section/TcfEuV2Test.java | 5 ++- 3 files changed, 16 insertions(+), 26 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 45046e73..85abfca1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -20,8 +20,8 @@ public enum TcfEuV2Field implements FieldKey { CONSENT_SCREEN(new EncodableFixedInteger<>("ConsentScreen", 6, 0)), CONSENT_LANGUAGE(new EncodableFixedString<>("ConsentLanguage", 2, "EN")), VENDOR_LIST_VERSION(new EncodableFixedInteger<>("VendorListVersion", 12, 0)), - POLICY_VERSION(new EncodableFixedInteger<>("PolicyVersion", 6, 2)), - IS_SERVICE_SPECIFIC(new EncodableBoolean<>("IsServiceSpecific", false)), + POLICY_VERSION(new EncodableFixedInteger<>("PolicyVersion", 6, 5)), + IS_SERVICE_SPECIFIC(new EncodableBoolean<>("IsServiceSpecific", true)), USE_NON_STANDARD_STACKS(new EncodableBoolean<>("UseNonStandardStacks", false)), SPECIAL_FEATURE_OPTINS(new EncodableFixedBitfield<>("SpecialFeatureOptins", 12)), PURPOSE_CONSENTS(new EncodableFixedBitfield<>("PurposeConsents", 24)), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index dbcd95d7..6a123dc5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; +import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.TraditionalBase64Segment; import java.time.Instant; import java.util.ArrayList; @@ -18,8 +19,10 @@ public class TcfEuV2 extends EncodableSection { public TcfEuV2() { super( new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES), - new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES), - new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES), + new TraditionalBase64Segment<>( + TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES, true), + new TraditionalBase64Segment<>( + TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES, true), new TraditionalBase64Segment<>(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES)); } @@ -40,7 +43,7 @@ public String getName() { @Override public int getVersion() { - return TcfEuV2.VERSION; + return (Integer) this.getFieldValue(TcfEuV2Field.VERSION); } @Override @@ -82,26 +85,14 @@ public void doDecode(CharSequence encodedString) { @Override public CharSequence doEncode() { - List encodedSegments = new ArrayList<>(size()); - if (size() >= 1) { - encodedSegments.add(getSegment(0).encodeCharSequence()); - - Boolean isServiceSpecific = (Boolean) this.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC); - if (isServiceSpecific) { - if (size() >= 2) { - encodedSegments.add(getSegment(1).encodeCharSequence()); - } - } else { - if (size() >= 2) { - encodedSegments.add(getSegment(2).encodeCharSequence()); - - if (size() >= 3) { - encodedSegments.add(getSegment(3).encodeCharSequence()); - } - } + int size = size(); + List encodedSegments = new ArrayList<>(size); + for (int i = 0; i < size; i++) { + EncodableSegment segment = getSegment(i); + if (segment.shouldEncode()) { + encodedSegments.add(segment.encodeCharSequence()); } } - return SlicedCharSequence.join('.', encodedSegments); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 1abdfb65..a5a0794f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -24,8 +24,7 @@ public void testEncode1() { tcfEuV2.setFieldValue( TcfEuV2Field.LAST_UPDATED, ZonedDateTime.of(2022, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC")).toInstant()); - Assertions.assertEquals( - "CPSG_8APSG_8AAAAAAENAACAAAAAAAAAAAAAAAAAAAAA.QAAA.IAAA", tcfEuV2.encode()); + Assertions.assertEquals("CPSG_8APSG_8AAAAAAENAAFgAAAAAAAAAAAAAAAAAAAA.IAAA", tcfEuV2.encode()); TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES.toString(); } @@ -51,7 +50,7 @@ public void testEncode2() { Set.of(), tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS)); Assertions.assertEquals( - "CPSG_8APSG_8AAAAAAENAACgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA", tcfEuV2.encode()); + "CPSG_8APSG_8AAAAAAENAAFgAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAAA.IAAA", tcfEuV2.encode()); } @Test From ca1ffbd36ce036e4e01290623755b8ba927bd927 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 1 Apr 2026 15:46:05 -0400 Subject: [PATCH 132/146] do not throw exception on contains zero or negative --- .../com/iab/gpp/encoder/datatype/IntegerSet.java | 3 +++ .../encoder/datatype/encoder/IntegerSetTest.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java index 32341097..19c02996 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/IntegerSet.java @@ -73,6 +73,9 @@ public boolean isEmpty() { } public boolean containsInt(int value) { + if (value < adjustment) { + return false; + } int offset = getOffset(value); return offset < to && bitSet.get(offset); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java index d2f32236..57780f67 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.*; +import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.datatype.IntegerSet; import java.util.ArrayList; import java.util.Iterator; @@ -48,4 +49,19 @@ void test() { set.addRange(1, 3); assertEquals(Set.of(1, 2), set); } + + @Test + void boundsTest() { + IntegerSet set = new IntegerSet(new BitSet(), 10, 13, 1); + + set.add(1); + set.add(2); + set.add(3); + assertThrows(IndexOutOfBoundsException.class, () -> set.add(0)); + assertThrows(IndexOutOfBoundsException.class, () -> set.add(-1)); + assertFalse(set.contains(0)); + assertFalse(set.contains(-1)); + assertFalse(set.contains(4)); + assertFalse(set.contains(100)); + } } From 93690f82d277e6c3423a4cbe6827440b1998effe Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 1 Apr 2026 17:09:13 -0400 Subject: [PATCH 133/146] add range entry toString --- .../main/java/com/iab/gpp/encoder/datatype/RangeEntry.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index c30f40f5..1bfc6ce3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -62,4 +62,9 @@ public void setDirty(boolean dirty) { this.dirty = dirty; ids.setDirty(dirty); } + + @Override + public String toString() { + return "{key=" + key + ", type=" + type + ", ids=" + ids + "}"; + } } From 1102e11dcfadd0164bb2e17fa94831528c658140 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 1 Apr 2026 17:23:22 -0400 Subject: [PATCH 134/146] Update IntegerSetTest.java --- .../encoder/datatype/encoder/IntegerSetTest.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java index 57780f67..7f4ead51 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java @@ -52,15 +52,23 @@ void test() { @Test void boundsTest() { - IntegerSet set = new IntegerSet(new BitSet(), 10, 13, 1); + BitSet bitSet = new BitSet(); + + bitSet.set(10); + bitSet.set(11); + bitSet.set(12); + bitSet.set(13); + + IntegerSet set = new IntegerSet(bitSet, 10, 13, 1); + assertEquals(Set.of(1,2,3), set); - set.add(1); - set.add(2); - set.add(3); assertThrows(IndexOutOfBoundsException.class, () -> set.add(0)); assertThrows(IndexOutOfBoundsException.class, () -> set.add(-1)); assertFalse(set.contains(0)); assertFalse(set.contains(-1)); + assertTrue(set.contains(1)); + assertTrue(set.contains(2)); + assertTrue(set.contains(3)); assertFalse(set.contains(4)); assertFalse(set.contains(100)); } From 210e4aef9750762af9b44187a14018865b43962e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 1 Apr 2026 20:57:03 -0400 Subject: [PATCH 135/146] fix dirty setting --- iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java | 2 +- .../iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java | 2 +- .../src/test/java/com/iab/gpp/encoder/GppModelTest.java | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index a55c9ab6..5b3de634 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -373,7 +373,7 @@ public void setDirty(boolean dirty) { for (Integer sectionId : header.getSectionsIds()) { EncodableSection section = sections.get(sectionId); if (section != null) { - section.setDirty(true); + section.setDirty(dirty); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 1e15d282..3b7347a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -45,7 +45,7 @@ public final boolean hasField(E key) { @Override public final boolean isDirty() { if (dirty) { - return dirty; + return true; } int size = fieldNames.size(); for (int i = 0; i < size; i++) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 19fabe27..147c3401 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -768,6 +768,7 @@ public void testDecode4() { @Test public void testDecode5() { GppModel gppModel = new GppModel("DBABLA~BVQqAAAAAgA.QA"); + Assertions.assertEquals("BVQqAAAAAgA.QA", gppModel.getUsNatSection().encode()); gppModel.getFieldValue(UsNat.NAME, UsNatField.VERSION); } From 1d74ee62cdac9d04a3803ed781b99904f0ba2e6e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 1 Apr 2026 20:57:19 -0400 Subject: [PATCH 136/146] spotless --- .../iab/gpp/encoder/datatype/encoder/IntegerSetTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java index 7f4ead51..63e5e768 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java @@ -53,14 +53,14 @@ void test() { @Test void boundsTest() { BitSet bitSet = new BitSet(); - + bitSet.set(10); bitSet.set(11); bitSet.set(12); bitSet.set(13); - + IntegerSet set = new IntegerSet(bitSet, 10, 13, 1); - assertEquals(Set.of(1,2,3), set); + assertEquals(Set.of(1, 2, 3), set); assertThrows(IndexOutOfBoundsException.class, () -> set.add(0)); assertThrows(IndexOutOfBoundsException.class, () -> set.add(-1)); From c21e64f8af19c64ba106a4628572730c329ca1c0 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 1 Apr 2026 21:01:36 -0400 Subject: [PATCH 137/146] e --- iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 5b3de634..22da774b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -36,7 +36,7 @@ public class GppModel extends AbstractEncodable { - // NOTE: we genrally use concrete types to avoid the cost of interface calls + // NOTE: we generally use concrete types to avoid the cost of interface calls private static final HashMap>> SECTION_ID_TO_CONSTRUCTOR = new HashMap<>(); private static final HashMap SECTION_NAME_TO_ID = new HashMap<>(); From 6ca6d111842ec0e316c2d2ac9672da4abd58c789 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 1 Apr 2026 21:28:51 -0400 Subject: [PATCH 138/146] clean up toString --- .../java/com/iab/gpp/encoder/section/EncodableSection.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 14b5d3dc..d915d4b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -174,7 +174,11 @@ public final String toString() { .append(getVersion()); int numSegments = size(); for (int i = 0; i < numSegments; i++) { - sb.append(", ").append(getSegment(i).toString()); + EncodableSegment segment = getSegment(i); + String segmentInfo = segment.toString(); + if (segment.shouldEncode()) { + sb.append(", ").append(segmentInfo); + } } sb.append('}'); return sb.toString(); From c55c459ca7e17da930e44cc7bd8600cfc0a4835e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 13 Apr 2026 14:01:36 -0400 Subject: [PATCH 139/146] remove extra mn segments --- .../gpp/encoder/segment/UsMnCoreSegment.java | 97 ------------------- .../gpp/encoder/segment/UsMnGpcSegment.java | 61 ------------ 2 files changed, 158 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMnCoreSegment.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMnGpcSegment.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMnCoreSegment.java deleted file mode 100644 index 1d48ea10..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMnCoreSegment.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; -import com.iab.gpp.encoder.field.UsMnField; -import com.iab.gpp.encoder.section.UsMn; - -import java.util.Arrays; -import java.util.List; -import java.util.function.Predicate; - -public class UsMnCoreSegment extends AbstractLazilyEncodableSegment { - - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); - - public UsMnCoreSegment() { - super(); - } - - public UsMnCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - public List getFieldNames() { - return UsMnField.USMN_CORE_SEGMENT_FIELD_NAMES; - } - - @Override - protected EncodableBitStringFields initializeFields() { - Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); - Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { - for (int n : l) { - if (n < 0 || n > 2) { - return false; - } - } - return true; - }); - - EncodableBitStringFields fields = new EncodableBitStringFields(); - fields.put(UsMnField.VERSION, new EncodableFixedInteger(6, UsMn.VERSION)); - fields.put(UsMnField.PROCESSING_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMnField.SALE_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMnField.SALE_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMnField.TARGETED_ADVERTISING_OPT_OUT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMnField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) - .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsMnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMnField.ADDITIONAL_DATA_PROCESSING_CONSENT, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMnField.MSPA_COVERED_TRANSACTION, - new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMnField.MSPA_OPT_OUT_OPTION_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMnField.MSPA_SERVICE_PROVIDER_MODE, - new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; - } - - @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.isEmpty()) { - this.fields.reset(fields); - } - try { - String bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsMnCoreSegment '" + encodedString + "'", e); - } - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMnGpcSegment.java deleted file mode 100644 index fbeb9df0..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMnGpcSegment.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.iab.gpp.encoder.segment; - -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; -import com.iab.gpp.encoder.datatype.EncodableBoolean; -import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; -import com.iab.gpp.encoder.field.UsMnField; - -import java.util.List; - -public class UsMnGpcSegment extends AbstractLazilyEncodableSegment { - - private AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); - - public UsMnGpcSegment() { - super(); - } - - public UsMnGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - public List getFieldNames() { - return UsMnField.USMN_GPC_SEGMENT_FIELD_NAMES; - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(); - fields.put(UsMnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsMnField.GPC_SEGMENT_INCLUDED, new EncodableBoolean(true)); - fields.put(UsMnField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected String encodeSegment(EncodableBitStringFields fields) { - String bitString = bitStringEncoder.encode(fields, getFieldNames()); - String encodedString = base64UrlEncoder.encode(bitString); - return encodedString; - } - - @Override - protected void decodeSegment(String encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.isEmpty()) { - this.fields.reset(fields); - } - try { - String bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, getFieldNames(), fields); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsMnGpcSegment '" + encodedString + "'", e); - } - } -} From acfe1f2dc8f527cc701e58eb0ed3f1accfd5d035 Mon Sep 17 00:00:00 2001 From: Mayank Mishra Date: Fri, 17 Apr 2026 13:19:53 -0400 Subject: [PATCH 140/146] Change git pull branch from master to 4.X --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f40adc9e..9e40f3d1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -66,7 +66,7 @@ jobs: # Pull latest changes from master - name: Pull latest changes - run: git pull origin master + run: git pull origin 4.X # Set the release version in pom.xml - name: Set release version From 6c77c6983d04e97520cf6bde1e4931beebbbdc1a Mon Sep 17 00:00:00 2001 From: Mayank Mishra Date: Fri, 17 Apr 2026 13:21:39 -0400 Subject: [PATCH 141/146] Update release name and version description in workflow --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 9e40f3d1..95820f3d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,13 +8,13 @@ # GPG_PASSPHRASE - Passphrase for the GPG key # PAT - Personal access token with repo scope (for pushing commits/tags) # -name: IABGPP-Java Release +name: IABGPP-Java 4.X Release on: workflow_dispatch: inputs: version: - description: 'The release version (e.g., 3.x.x)' + description: 'The release version (e.g., 4.x.x)' required: true default: '' From a698c88dc0d52b0d61af6da0f7d08a23055a3a41 Mon Sep 17 00:00:00 2001 From: xdevanshux Date: Sat, 18 Apr 2026 21:43:30 +0530 Subject: [PATCH 142/146] workflow file changes --- .github/workflows/{main.yml => main-workflow.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{main.yml => main-workflow.yml} (100%) diff --git a/.github/workflows/main.yml b/.github/workflows/main-workflow.yml similarity index 100% rename from .github/workflows/main.yml rename to .github/workflows/main-workflow.yml From 26f70a9230ceac4e1a5b1227bf75f8636d4263ff Mon Sep 17 00:00:00 2001 From: xdevanshux Date: Sat, 18 Apr 2026 21:50:51 +0530 Subject: [PATCH 143/146] Create 4.x-release.yml --- .github/workflows/4.x-release.yml | 109 ++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 .github/workflows/4.x-release.yml diff --git a/.github/workflows/4.x-release.yml b/.github/workflows/4.x-release.yml new file mode 100644 index 00000000..95820f3d --- /dev/null +++ b/.github/workflows/4.x-release.yml @@ -0,0 +1,109 @@ +# Release to Maven Central via Central Publisher Portal +# https://central.sonatype.org/publish/publish-portal-guide/ +# +# Required GitHub secrets (Settings → Secrets and variables → Actions): +# CENTRAL_TOKEN_USERNAME - Portal token username (from https://central.sonatype.com/usertoken) +# CENTRAL_TOKEN_PASSWORD - Portal token password (from same page; save on first view, cannot be retrieved later) +# GPG_SECRET_KEY - Armored GPG private key for signing +# GPG_PASSPHRASE - Passphrase for the GPG key +# PAT - Personal access token with repo scope (for pushing commits/tags) +# +name: IABGPP-Java 4.X Release + +on: + workflow_dispatch: + inputs: + version: + description: 'The release version (e.g., 4.x.x)' + required: true + default: '' + +jobs: + release: + runs-on: ubuntu-latest + steps: + # Checkout the repository with full history for tagging + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Set up Java + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + + # Import GPG secret key for signing + - name: Import GPG key + run: | + echo "${{ secrets.GPG_SECRET_KEY }}" > secret_key.asc + gpg --import --no-tty --batch secret_key.asc || { echo "GPG import failed"; cat secret_key.asc; exit 1; } + rm -f secret_key.asc + + # Generate settings.xml with Central Publisher Portal token credentials + # Token from: https://central.sonatype.com/usertoken + - name: Create settings.xml + env: + CENTRAL_TOKEN_USERNAME: ${{ secrets.CENTRAL_TOKEN_USERNAME }} + CENTRAL_TOKEN_PASSWORD: ${{ secrets.CENTRAL_TOKEN_PASSWORD }} + run: | + mkdir -p ~/.m2 + cat > ~/.m2/settings.xml << EOF + + + + central + ${CENTRAL_TOKEN_USERNAME} + ${CENTRAL_TOKEN_PASSWORD} + + + + EOF + + # Pull latest changes from master + - name: Pull latest changes + run: git pull origin 4.X + + # Set the release version in pom.xml + - name: Set release version + run: mvn versions:set -DnewVersion=${{ github.event.inputs.version }} -DgenerateBackupPoms=false + + # Build and deploy to Central Publisher Portal (mvn deploy uploads bundle and publishes) + - name: Deploy release + run: | + echo "pinentry-mode loopback" > ~/.gnupg/gpg.conf + echo "use-agent" >> ~/.gnupg/gpg.conf + export GPG_TTY=$(tty || echo /dev/tty) + mvn clean deploy --settings ~/.m2/settings.xml -Dgpg.passphrase="${{ secrets.GPG_PASSPHRASE }}" -Prelease + + # Commit the release version and create a tag + - name: Commit and tag release + run: | + git config user.email "mayank@iabtechlab.com" + git config user.name "Mayank Mishra" + git add . + git commit -m "${{ github.event.inputs.version }}" + git tag "${{ github.event.inputs.version }}" + + # Set the next snapshot version + - name: Set next snapshot version + run: mvn versions:set -DnextSnapshot=true -DgenerateBackupPoms=false + + # Commit the snapshot version + - name: Commit snapshot version + run: | + NEW_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + git add . + git commit -m "$NEW_VERSION" + + # Push commits and tags to GitHub + - name: Push changes + run: | + git status + git push; git push --tags + env: + GITHUB_TOKEN: ${{ secrets.PAT }} From 1ff453a711bd1dabd8be91ee147a0e24083b684c Mon Sep 17 00:00:00 2001 From: xdevanshux Date: Tue, 21 Apr 2026 14:38:21 +0530 Subject: [PATCH 144/146] pom updated --- pom.xml | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 4a7e7d61..ade925c0 100644 --- a/pom.xml +++ b/pom.xml @@ -40,11 +40,7 @@ Sonatype Nexus Snapshots https://s01.oss.sonatype.org/content/repositories/snapshots/ - - sonatype-nexus-staging - Nexus Release Repository - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ - + @@ -160,6 +156,25 @@ release + + org.sonatype.central + central-publishing-maven-plugin + 0.10.0 + true + + central + true + published + + + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-javadoc-plugin + org.apache.maven.plugins maven-gpg-plugin From ebfc1804d4644b61bf48e2f33fad215127db3070 Mon Sep 17 00:00:00 2001 From: xdevanshux Date: Tue, 21 Apr 2026 15:29:24 +0530 Subject: [PATCH 145/146] Project name added --- iabgpp-encoder/pom.xml | 9 +++++++++ iabgpp-extras-jackson/pom.xml | 9 +++++++++ iabgpp-extras/pom.xml | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index be21aca1..a932b3a7 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -11,6 +11,7 @@ iabgpp-encoder + IAB GPP Encoder jar @@ -51,6 +52,14 @@ release + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-javadoc-plugin + org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index 7c92b506..3aecbbc1 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -11,6 +11,7 @@ iabgpp-extras-jackson + IAB GPP Extras Jackson jar @@ -70,6 +71,14 @@ release + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-javadoc-plugin + org.apache.maven.plugins maven-gpg-plugin diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index 3025474c..e9ff530e 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -11,6 +11,7 @@ iabgpp-extras + IAB GPP Extras jar @@ -42,6 +43,14 @@ release + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-javadoc-plugin + org.apache.maven.plugins maven-gpg-plugin From 1fc490e9be132ce441ca6399d286b2b5c8db1dcb Mon Sep 17 00:00:00 2001 From: xdevanshux Date: Tue, 21 Apr 2026 16:07:14 +0530 Subject: [PATCH 146/146] 4.0.0-RC1 --- iabgpp-encoder/pom.xml | 2 +- iabgpp-extras-jackson/pom.xml | 4 ++-- iabgpp-extras/pom.xml | 2 +- pom.xml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/iabgpp-encoder/pom.xml b/iabgpp-encoder/pom.xml index a932b3a7..fbae54d6 100644 --- a/iabgpp-encoder/pom.xml +++ b/iabgpp-encoder/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 4.0.0-SNAPSHOT + 4.0.0-RC1 iabgpp-encoder diff --git a/iabgpp-extras-jackson/pom.xml b/iabgpp-extras-jackson/pom.xml index 3aecbbc1..57af2ed7 100644 --- a/iabgpp-extras-jackson/pom.xml +++ b/iabgpp-extras-jackson/pom.xml @@ -7,7 +7,7 @@ iabgpp-core com.iabgpp - 4.0.0-SNAPSHOT + 4.0.0-RC1 iabgpp-extras-jackson @@ -25,7 +25,7 @@ com.iabgpp iabgpp-extras - 4.0.0-SNAPSHOT + 4.0.0-RC1 diff --git a/iabgpp-extras/pom.xml b/iabgpp-extras/pom.xml index e9ff530e..1cfe8e32 100644 --- a/iabgpp-extras/pom.xml +++ b/iabgpp-extras/pom.xml @@ -7,7 +7,7 @@ com.iabgpp iabgpp-core - 4.0.0-SNAPSHOT + 4.0.0-RC1 iabgpp-extras diff --git a/pom.xml b/pom.xml index ade925c0..c8a7ac09 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iabgpp iabgpp-core - 4.0.0-SNAPSHOT + 4.0.0-RC1 IAB GPP Core Library https://github.com/IABTechLabs/iabtcf-java Encode and decode consent information with the IAB GPP v3.0.