From 24147c43690f8128acaa64468c3b4d2907768e27 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Sat, 20 Jul 2024 15:57:27 -0400 Subject: [PATCH 01/43] 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 02/43] 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 03/43] 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 04/43] 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 05/43] 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 06/43] 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 07/43] 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 08/43] 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 09/43] 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 10/43] 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 11/43] 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 12/43] 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 13/43] 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 14/43] 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 15/43] 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 16/43] 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 17/43] 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 18/43] 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 19/43] 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 20/43] 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 21/43] 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 22/43] 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 23/43] 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 24/43] 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 25/43] 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 26/43] 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 27/43] 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 28/43] 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 29/43] 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 30/43] 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 31/43] 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 32/43] 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 33/43] 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 34/43] 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 35/43] 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 36/43] 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 37/43] 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 38/43] 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 39/43] 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 40/43] 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 41/43] 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 42/43] 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 43/43] 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.