From 9812b662a44fe50bb2f8700002c78a7d59904b28 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 13:20:46 -0500 Subject: [PATCH 01/49] optimize hot loops --- .../section/AbstractLazilyEncodableSection.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 167e7188..8b94a586 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -30,7 +30,9 @@ public boolean hasField(String fieldName) { this.decoded = true; } - for(EncodableSegment segment : segments) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if (segment.hasField(fieldName)) { return true; } @@ -46,7 +48,9 @@ public Object getFieldValue(String fieldName) { this.decoded = true; } - for(EncodableSegment segment : segments) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if(segment.hasField(fieldName)) { return segment.getFieldValue(fieldName); } @@ -62,7 +66,9 @@ public void setFieldValue(String fieldName, Object value) { this.decoded = true; } - for(EncodableSegment segment : segments) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if(segment.hasField(fieldName)) { segment.setFieldValue(fieldName, value); this.dirty = true; From 674d03f8ff00ab0fd186ad78232254e08a47b727 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 14:10:30 -0500 Subject: [PATCH 02/49] clean up mutability collection flow --- .../AbstractDirtyableBitStringDataType.java | 24 ++++++ .../AbstractEncodableBitStringDataType.java | 6 +- .../iab/gpp/encoder/datatype/DataType.java | 6 +- .../EncodableArrayOfFixedIntegerRanges.java | 20 +++-- .../EncodableFibonacciIntegerRange.java | 7 +- .../datatype/EncodableFixedBitfield.java | 7 +- .../datatype/EncodableFixedIntegerList.java | 11 +-- .../datatype/EncodableFixedIntegerRange.java | 7 +- .../datatype/EncodableFlexibleBitfield.java | 7 +- .../EncodableOptimizedFibonacciRange.java | 7 +- .../EncodableOptimizedFixedRange.java | 7 +- .../{ManagedFixedList.java => FixedList.java} | 20 +++-- .../encoder/datatype/ManagedIntegerSet.java | 77 ------------------- .../iab/gpp/encoder/datatype/RangeEntry.java | 18 ++++- .../datatype/encoder/BaseIntegerSet.java | 56 -------------- .../encoder/datatype/encoder/Dirtyable.java | 6 ++ .../encoder/FibonacciIntegerRangeEncoder.java | 4 +- .../encoder/FixedIntegerRangeEncoder.java | 4 +- .../datatype/encoder/IntegerBitSet.java | 73 +++++++++++++++++- .../encoder/datatype/encoder/IntegerSet.java | 2 +- .../OptimizedFibonacciRangeEncoder.java | 3 +- .../encoder/OptimizedFixedRangeEncoder.java | 3 +- .../AbstractLazilyEncodableSegment.java | 4 +- 23 files changed, 171 insertions(+), 208 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/{ManagedFixedList.java => FixedList.java} (59%) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java new file mode 100644 index 00000000..cf2abaa6 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractDirtyableBitStringDataType.java @@ -0,0 +1,24 @@ +package com.iab.gpp.encoder.datatype; + +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +// This class is used to handle collection types. +// It is important that we monitor the collections we return for changes. +public abstract class AbstractDirtyableBitStringDataType + extends AbstractEncodableBitStringDataType { + + protected AbstractDirtyableBitStringDataType(boolean hardFailIfMissing) { + super(hardFailIfMissing); + } + + @Override + public boolean isDirty() { + return super.isDirty() || value.isDirty(); + } + + @Override + public void setDirty(boolean dirty) { + super.setDirty(dirty); + value.setDirty(dirty); + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 8cb8cdb6..48cf6922 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -23,11 +23,11 @@ public AbstractEncodableBitStringDataType withValidator(Predicate validato return this; } - public boolean hasValue() { + public final boolean hasValue() { return this.value != null; } - public T getValue() { + public final T getValue() { return this.value; } @@ -48,7 +48,7 @@ public void setValue(Object value) { } - public boolean getHardFailIfMissing() { + public final boolean getHardFailIfMissing() { return this.hardFailIfMissing; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index 58d70730..be85c17b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -1,9 +1,9 @@ package com.iab.gpp.encoder.datatype; -public interface DataType { +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +public interface DataType extends Dirtyable { boolean hasValue(); T getValue(); void setValue(Object value); - boolean isDirty(); - void setDirty(boolean dirty); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index bcc9ff98..ad805233 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -12,16 +11,18 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableArrayOfFixedIntegerRanges extends AbstractEncodableBitStringDataType> { +public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { private int keyBitStringLength; private int typeBitStringLength; + private static final FixedList EMPTY = new FixedList<>(List.of()); + public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { super(hardFailIfMissing); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; - this.value = Collections.emptyList(); + this.value = EMPTY; } @Override @@ -58,11 +59,13 @@ public void decode(BitString bitString) { IntegerSet ids = FixedIntegerRangeEncoder.decode(substring); index += substring.length(); - entries.add(new RangeEntry(key, type, ids)); + RangeEntry entry = new RangeEntry(key, type, ids); + entry.setDirty(false); + entries.add(entry); } - // NOTE: this requires that updates to structure be done using the setter - this.value = Collections.unmodifiableList(entries); + // NOTE: this requires that adding/removing ranges uses the setter + this.value = new FixedList<>(entries); } catch (Exception e) { throw new DecodingException(e); } @@ -98,4 +101,9 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE } } + @SuppressWarnings("unchecked") + @Override + public void setValue(Object value) { + super.setValue(new FixedList<>((List) value)); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 19963a55..2c8df3c7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFibonacciIntegerRange extends AbstractEncodableBitStringDataType { +public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitStringDataType { public EncodableFibonacciIntegerRange() { super(true); @@ -57,9 +57,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index e7404069..48615032 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFixedBitfield extends AbstractEncodableBitStringDataType { +public final class EncodableFixedBitfield extends AbstractDirtyableBitStringDataType { private final int numElements; @@ -49,9 +49,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 3a4db509..e38cd8b9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFixedIntegerList extends AbstractEncodableBitStringDataType> { +public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType> { private int elementBitStringLength; private int numElements; @@ -37,7 +37,7 @@ public void encode(BitStringBuilder builder) { public void decode(BitString bitString) { try { - this.value = FixedIntegerListEncoder.decode(bitString, this.elementBitStringLength, this.numElements); + this.value = new FixedList<>(FixedIntegerListEncoder.decode(bitString, this.elementBitStringLength, this.numElements)); } catch (Exception e) { throw new DecodingException(e); } @@ -61,11 +61,6 @@ public void setValue(Object value) { if (v.size() > numElements) { v = v.subList(0, numElements); } - super.setValue(v); - } - - @Override - public List getValue() { - return new ManagedFixedList<>(this, super.getValue()); + super.setValue(new FixedList<>(v)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 7bbbc4a6..56b94487 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -10,7 +10,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFixedIntegerRange extends AbstractEncodableBitStringDataType { +public final class EncodableFixedIntegerRange extends AbstractDirtyableBitStringDataType { protected EncodableFixedIntegerRange() { super(true); @@ -56,9 +56,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 46337183..04e8d8a5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFlexibleBitfield extends AbstractEncodableBitStringDataType { +public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringDataType { private IntSupplier getLengthSupplier; @@ -51,9 +51,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java index 1aba7d88..d966ad66 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java @@ -10,7 +10,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableOptimizedFibonacciRange extends AbstractEncodableBitStringDataType { +public final class EncodableOptimizedFibonacciRange extends AbstractDirtyableBitStringDataType { protected EncodableOptimizedFibonacciRange() { super(true); @@ -64,9 +64,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index a0669607..14b00485 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -11,7 +11,7 @@ import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableOptimizedFixedRange extends AbstractEncodableBitStringDataType { +public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStringDataType { public EncodableOptimizedFixedRange() { super(true); @@ -56,9 +56,4 @@ public void setValue(Object value) { this.value.clear(); this.value.addAll((Collection) value); } - - @Override - public IntegerSet getValue() { - return new ManagedIntegerSet(this, super.getValue()); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java similarity index 59% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java index df38f67f..4a3955e6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedFixedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java @@ -2,14 +2,14 @@ import java.util.AbstractList; import java.util.List; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -final class ManagedFixedList extends AbstractList { +public final class FixedList extends AbstractList implements Dirtyable { - private final DataType parent; + private boolean dirty; private final List delegate; - ManagedFixedList(DataType parent, List delegate) { - this.parent = parent; + FixedList(List delegate) { this.delegate = delegate; } @@ -27,7 +27,7 @@ public T get(int index) { public T set(int index, T value) { T prior = delegate.set(index, value); if (prior != null) { - parent.setDirty(true); + dirty = true; } return prior; } @@ -36,4 +36,14 @@ public T set(int index, T value) { public String toString() { return delegate.toString(); } + + @Override + public boolean isDirty() { + return dirty; + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java deleted file mode 100644 index daccfdb9..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/ManagedIntegerSet.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import java.util.PrimitiveIterator; -import java.util.stream.IntStream; -import java.util.stream.Stream; -import com.iab.gpp.encoder.datatype.encoder.BaseIntegerSet; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; - -final class ManagedIntegerSet extends BaseIntegerSet { - - private final DataType parent; - private final IntegerSet delegate; - - ManagedIntegerSet(DataType parent, IntegerSet delegate) { - this.parent = parent; - this.delegate = delegate; - } - - @Override - public void clear() { - delegate.clear(); - parent.setDirty(true); - } - - @Override - public boolean isEmpty() { - return delegate.isEmpty(); - } - - @Override - public int size() { - return delegate.size(); - } - - @Override - public PrimitiveIterator.OfInt iterator() { - return delegate.iterator(); - } - - @Override - public Stream stream(){ - return delegate.stream(); - } - - @Override - public IntStream intStream() { - return delegate.intStream(); - } - - @Override - public boolean containsInt(int value) { - return delegate.containsInt(value); - } - - @Override - public boolean addInt(int value) { - boolean modified = delegate.addInt(value); - if (modified) { - parent.setDirty(true); - } - return modified; - } - - @Override - public boolean removeInt(int value) { - boolean modified = delegate.removeInt(value); - if (modified) { - parent.setDirty(true); - } - return modified; - } - - @Override - public String toString() { - return delegate.toString(); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 5ea4bd7f..ed997b16 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -2,11 +2,13 @@ import java.util.Collection; import java.util.Set; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -public class RangeEntry { +public class RangeEntry implements Dirtyable { + private boolean dirty; private int key; private int type; private final IntegerSet ids; @@ -24,6 +26,7 @@ public int getKey() { } public void setKey(int key) { + this.dirty = true; this.key = key; } @@ -32,6 +35,7 @@ public int getType() { } public void setType(int type) { + this.dirty = true; this.type = type; } @@ -40,8 +44,20 @@ public IntegerSet getIds() { } public void setIds(Collection ids) { + this.dirty = true; this.ids.clear(); this.ids.addAll(ids); } + @Override + public boolean isDirty() { + return dirty || ids.isDirty(); + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + ids.setDirty(dirty); + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java deleted file mode 100644 index bb872855..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/BaseIntegerSet.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import java.util.AbstractSet; -import java.util.Collection; - -public abstract class BaseIntegerSet extends AbstractSet implements IntegerSet { - - @Override - public final boolean contains(Object value) { - if (value instanceof Integer) { - return containsInt((Integer) value); - } - return false; - } - - @Override - public final boolean add(Integer value) { - if (value == null) { - return false; - } - return addInt(value); - } - - @Override - public final boolean remove(Object value) { - if (value instanceof Integer) { - return removeInt((Integer) value); - } - return false; - } - - @Override - public boolean removeAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } - - @Override - public boolean retainAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (!c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java new file mode 100644 index 00000000..2353de1d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/Dirtyable.java @@ -0,0 +1,6 @@ +package com.iab.gpp.encoder.datatype.encoder; + +public interface Dirtyable { + boolean isDirty(); + void setDirty(boolean dirty); +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 67958875..baac388a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -47,7 +47,7 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitString bitString) throws DecodingException { + public static IntegerBitSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } @@ -81,7 +81,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { startIndex = index + 2; } } - + value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index a92e2b09..48ef1429 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -43,7 +43,7 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitString bitString) throws DecodingException { + public static IntegerBitSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } @@ -69,7 +69,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { startIndex += 16; } } - + value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 7ff3483d..663b28f8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -1,6 +1,8 @@ package com.iab.gpp.encoder.datatype.encoder; +import java.util.AbstractSet; import java.util.BitSet; +import java.util.Collection; import java.util.NoSuchElementException; import java.util.Spliterator; import java.util.Spliterators; @@ -9,14 +11,15 @@ import java.util.stream.IntStream; import java.util.stream.StreamSupport; -public final class IntegerBitSet extends BaseIntegerSet { +public final class IntegerBitSet extends AbstractSet implements IntegerSet { private static final Logger LOGGER = Logger.getLogger(IntegerBitSet.class.getName()); static final int MAX_COLLECTION_SIZE = 8192; - protected final BitSet bitSet; - protected final int from; - protected final int to; + private boolean dirty; + private final BitSet bitSet; + private final int from; + private final int to; private final int adjustment; public IntegerBitSet(BitSet bitSet, int from, int to, int adjustment) { @@ -55,6 +58,7 @@ private int getOffset(int value) { @Override public void clear() { + dirty = true; bitSet.clear(from, to); } @@ -126,6 +130,7 @@ public void addRange(int start, int end) { logOutOfRange(end); realEnd = to; } + dirty = true; bitSet.set(realStart, realEnd); } @@ -140,6 +145,7 @@ public boolean addInt(int value) { return false; } bitSet.set(offset, true); + dirty = true; return true; } @@ -154,6 +160,65 @@ public boolean removeInt(int value) { return false; } bitSet.set(offset, false); + dirty = true; return true; } + + @Override + public final boolean contains(Object value) { + if (value instanceof Integer) { + return containsInt((Integer) value); + } + return false; + } + + @Override + public final boolean add(Integer value) { + if (value == null) { + return false; + } + return addInt(value); + } + + @Override + public final boolean remove(Object value) { + if (value instanceof Integer) { + return removeInt((Integer) value); + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } + + @Override + public boolean retainAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (!c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } + + @Override + public boolean isDirty() { + return dirty; + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index bc9aa3f7..5f27795e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -5,7 +5,7 @@ import java.util.Set; import java.util.stream.IntStream; -public interface IntegerSet extends Set { +public interface IntegerSet extends Set, Dirtyable { boolean containsInt(int value); default boolean containsAny(Collection c) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index 66160efd..195bb0dc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -28,7 +28,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerSet decode(BitString bitString) throws DecodingException { + public static IntegerBitSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } @@ -44,6 +44,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { value.addInt(i + 1); } } + value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 5a5660f8..2721e94a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -27,7 +27,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerSet decode(BitString bitString) throws DecodingException { + public static IntegerBitSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } @@ -43,6 +43,7 @@ public static IntegerSet decode(BitString bitString) throws DecodingException { value.addInt(i + 1); } } + value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 9e07c18e..b054ba04 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.segment; -import java.util.List; import java.util.function.Predicate; import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.FixedList; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.Fields; @@ -10,7 +10,7 @@ public abstract class AbstractLazilyEncodableSegment> implem protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - protected static final Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { + protected static final Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { for (int n : l) { if (n < 0 || n > 2) { return false; From cd9a8761c961ce1397daf4dc6b8e4034959c5dbd Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 15:33:46 -0500 Subject: [PATCH 03/49] use arrays --- .../EncodableArrayOfFixedIntegerRanges.java | 8 ++++---- .../datatype/EncodableFixedIntegerList.java | 18 ++++++++++-------- .../encoder/FixedIntegerListEncoder.java | 13 +++++++------ 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index ad805233..78069946 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -46,7 +46,7 @@ public void encode(BitStringBuilder sb) { public void decode(BitString bitString) { try { int size = FixedIntegerEncoder.decode(bitString, 0, 12); - List entries = new ArrayList<>(size); + RangeEntry[] entries = new RangeEntry[size]; int index = 12; for (int i = 0; i < size; i++) { int key = FixedIntegerEncoder.decode(bitString, index, keyBitStringLength); @@ -61,11 +61,11 @@ public void decode(BitString bitString) { RangeEntry entry = new RangeEntry(key, type, ids); entry.setDirty(false); - entries.add(entry); + entries[i] = entry; } // NOTE: this requires that adding/removing ranges uses the setter - this.value = new FixedList<>(entries); + this.value = new FixedList<>(Arrays.asList(entries)); } catch (Exception e) { throw new DecodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index e38cd8b9..d9f10208 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -54,13 +54,15 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - List v = new ArrayList<>((List) value); - for (int i = v.size(); i < numElements; i++) { - v.add(0); + List list = (List) value; + int size = list.size(); + if (size != numElements) { + Integer[] newList = new Integer[numElements]; + for (int i = 0; i < numElements; i++) { + newList[i] = i < size ? list.get(i) : 0; + } + list = Arrays.asList(newList); } - if (v.size() > numElements) { - v = v.subList(0, numElements); - } - super.setValue(new FixedList<>(v)); + super.setValue(new FixedList<>(list)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 7140af9c..b7b7acdd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -41,16 +41,17 @@ public static List decode(BitString bitString, int elementBitStringLeng bitString = bitString.expandTo(elementBitStringLength * numElements); - List value = new ArrayList<>(numElements); + Integer[] value = new Integer[numElements]; length = bitString.length(); + int idx = 0; for (int i = 0; i < length; i += elementBitStringLength) { - value.add(IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength))); + value[idx++] = IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength)); } - while (value.size() < numElements) { - value.add(0); + while (idx < numElements) { + value[idx++] = 0; } - return value; + return Arrays.asList(value); } } From bf62f5fb21e1164ad2bb1604ebea52f1daffa7a4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 15:42:24 -0500 Subject: [PATCH 04/49] clean up dirty flow again --- .../EncodableArrayOfFixedIntegerRanges.java | 1 - .../com/iab/gpp/encoder/datatype/FixedList.java | 14 ++++++++++++++ .../encoder/FibonacciIntegerRangeEncoder.java | 1 - .../datatype/encoder/FixedIntegerRangeEncoder.java | 1 - .../encoder/OptimizedFibonacciRangeEncoder.java | 1 - .../encoder/OptimizedFixedRangeEncoder.java | 1 - 6 files changed, 14 insertions(+), 5 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index 78069946..b1035592 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -60,7 +60,6 @@ public void decode(BitString bitString) { index += substring.length(); RangeEntry entry = new RangeEntry(key, type, ids); - entry.setDirty(false); entries[i] = entry; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java index 4a3955e6..4e2d8b04 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java @@ -39,11 +39,25 @@ public String toString() { @Override public boolean isDirty() { + int size = delegate.size(); + for (int i = 0; i < size; i++) { + T value = delegate.get(i); + if (value instanceof Dirtyable && ((Dirtyable) value).isDirty()) { + return true; + } + } return dirty; } @Override public void setDirty(boolean dirty) { + int size = delegate.size(); + for (int i = 0; i < size; i++) { + T value = delegate.get(i); + if (value instanceof Dirtyable) { + ((Dirtyable) value).setDirty(dirty); + } + } this.dirty = dirty; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index baac388a..46b409bc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -81,7 +81,6 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException startIndex = index + 2; } } - value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 48ef1429..6160fa12 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -69,7 +69,6 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException startIndex += 16; } } - value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index 195bb0dc..9240bee7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -44,7 +44,6 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException value.addInt(i + 1); } } - value.setDirty(false); return value; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 2721e94a..3126c60d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -43,7 +43,6 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException value.addInt(i + 1); } } - value.setDirty(false); return value; } } From 56b930e4fd3f2c9b70588b8beb6dd6daf50ca341 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 16:55:25 -0500 Subject: [PATCH 05/49] FixedIntegerList --- .../datatype/EncodableFixedIntegerList.java | 26 +++----- .../encoder/datatype/FixedIntegerList.java | 59 +++++++++++++++++++ .../iab/gpp/encoder/datatype/FixedList.java | 4 +- .../encoder/FixedIntegerListEncoder.java | 17 +++--- .../com/iab/gpp/encoder/section/UsCa.java | 11 ++-- .../com/iab/gpp/encoder/section/UsCo.java | 6 +- .../com/iab/gpp/encoder/section/UsCt.java | 11 ++-- .../com/iab/gpp/encoder/section/UsDe.java | 11 ++-- .../com/iab/gpp/encoder/section/UsFl.java | 11 ++-- .../com/iab/gpp/encoder/section/UsIa.java | 6 +- .../com/iab/gpp/encoder/section/UsMt.java | 11 ++-- .../com/iab/gpp/encoder/section/UsNat.java | 11 ++-- .../com/iab/gpp/encoder/section/UsNe.java | 6 +- .../com/iab/gpp/encoder/section/UsNh.java | 11 ++-- .../com/iab/gpp/encoder/section/UsNj.java | 11 ++-- .../com/iab/gpp/encoder/section/UsOr.java | 11 ++-- .../com/iab/gpp/encoder/section/UsTn.java | 6 +- .../com/iab/gpp/encoder/section/UsTx.java | 6 +- .../com/iab/gpp/encoder/section/UsUt.java | 6 +- .../com/iab/gpp/encoder/section/UsVa.java | 6 +- .../AbstractLazilyEncodableSegment.java | 4 +- .../gpp/encoder/segment/UsCaCoreSegment.java | 5 +- .../gpp/encoder/segment/UsCoCoreSegment.java | 3 +- .../gpp/encoder/segment/UsCtCoreSegment.java | 5 +- .../gpp/encoder/segment/UsDeCoreSegment.java | 5 +- .../gpp/encoder/segment/UsFlCoreSegment.java | 5 +- .../gpp/encoder/segment/UsIaCoreSegment.java | 3 +- .../gpp/encoder/segment/UsMtCoreSegment.java | 5 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 5 +- .../gpp/encoder/segment/UsNeCoreSegment.java | 3 +- .../gpp/encoder/segment/UsNhCoreSegment.java | 5 +- .../gpp/encoder/segment/UsNjCoreSegment.java | 5 +- .../gpp/encoder/segment/UsOrCoreSegment.java | 5 +- .../gpp/encoder/segment/UsTnCoreSegment.java | 3 +- .../gpp/encoder/segment/UsTxCoreSegment.java | 3 +- .../gpp/encoder/segment/UsUtCoreSegment.java | 3 +- .../gpp/encoder/segment/UsVaCoreSegment.java | 3 +- 37 files changed, 171 insertions(+), 146 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index d9f10208..c15ad1d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -9,22 +8,16 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType> { +public final class EncodableFixedIntegerList extends AbstractDirtyableBitStringDataType { private int elementBitStringLength; private int numElements; - protected EncodableFixedIntegerList(int elementBitStringLength, int numElements) { + public EncodableFixedIntegerList(int elementBitStringLength, int numElements) { super(true); this.elementBitStringLength = elementBitStringLength; this.numElements = numElements; - } - - public EncodableFixedIntegerList(int elementBitStringLength, List value) { - super(true); - this.elementBitStringLength = elementBitStringLength; - this.numElements = value.size(); - setValue(value); + super.setValue(new FixedIntegerList(numElements)); } public void encode(BitStringBuilder builder) { @@ -37,7 +30,7 @@ public void encode(BitStringBuilder builder) { public void decode(BitString bitString) { try { - this.value = new FixedList<>(FixedIntegerListEncoder.decode(bitString, this.elementBitStringLength, this.numElements)); + FixedIntegerListEncoder.decode(this.value, bitString, this.elementBitStringLength, this.numElements); } catch (Exception e) { throw new DecodingException(e); } @@ -56,13 +49,10 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE public void setValue(Object value) { List list = (List) value; int size = list.size(); - if (size != numElements) { - Integer[] newList = new Integer[numElements]; - for (int i = 0; i < numElements; i++) { - newList[i] = i < size ? list.get(i) : 0; - } - list = Arrays.asList(newList); + for (int i = 0; i < numElements; i++) { + this.value.set(i, i < size ? list.get(i) : 0); } - super.setValue(new FixedList<>(list)); + // call validator + super.setValue(this.value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java new file mode 100644 index 00000000..3d04802b --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -0,0 +1,59 @@ +package com.iab.gpp.encoder.datatype; + +import java.util.AbstractList; +import java.util.Arrays; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +public final class FixedIntegerList extends AbstractList implements Dirtyable { + + private boolean dirty; + private final byte[] array; + + public FixedIntegerList(int size) { + this.array = new byte[size]; + } + + @Override + public int size() { + return array.length; + } + + @Override + public Integer get(int index) { + return getInt(index); + } + + public int getInt(int index) { + return array[index]; + } + + @Override + public Integer set(int index, Integer value) { + return setInt(index, value); + } + + public int setInt(int index, int value) { + if(value < 0 || value > 0xff) { + throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 256."); + } + int prior = array[index]; + array[index] = (byte) value; + dirty = true; + return prior; + } + + @Override + public String toString() { + return Arrays.toString(array); + } + + @Override + public boolean isDirty() { + return dirty; + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java index 4e2d8b04..962feb0e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java @@ -26,9 +26,7 @@ public T get(int index) { @Override public T set(int index, T value) { T prior = delegate.set(index, value); - if (prior != null) { - dirty = true; - } + dirty = true; return prior; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index b7b7acdd..e4ed367f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -1,10 +1,10 @@ package com.iab.gpp.encoder.datatype.encoder; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,7 +28,13 @@ public static void encode(BitStringBuilder builder, List value, int ele } } - public static List decode(BitString bitString, int elementBitStringLength, int numElements) + public static FixedIntegerList decode(BitString bitString, int elementBitStringLength, int numElements) { + FixedIntegerList out = new FixedIntegerList(numElements); + decode(out, bitString, elementBitStringLength, numElements); + return out; + } + + public static void decode(FixedIntegerList out, BitString bitString, int elementBitStringLength, int numElements) throws DecodingException { int length = bitString.length(); if (length > elementBitStringLength * numElements) { @@ -41,17 +47,14 @@ public static List decode(BitString bitString, int elementBitStringLeng bitString = bitString.expandTo(elementBitStringLength * numElements); - Integer[] value = new Integer[numElements]; length = bitString.length(); int idx = 0; for (int i = 0; i < length; i += elementBitStringLength) { - value[idx++] = IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength)); + out.set(idx++, IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength))); } while (idx < numElements) { - value[idx++] = 0; + out.set(idx++, 0); } - - return Arrays.asList(value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 3ab9bbd2..d737de1d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCaCoreSegment; @@ -98,14 +99,12 @@ public Integer getSharingOptOut() { return (Integer) this.getFieldValue(UsCaField.SHARING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsCaField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getPersonalDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 083031a8..31a40d9d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCoCoreSegment; @@ -98,9 +99,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsCoField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsCoField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsCoField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 9d49656f..3bc3c5b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCtCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsCtField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsCtField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsCtField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getMspaCoveredTransaction() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 52664417..cd3b11c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsDeCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsDeField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsDeField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsDeField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 6e6fd6b5..3c8888e1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsFlCoreSegment; @@ -87,14 +88,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsFlField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsFlField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsFlField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 37e5cb53..b7ffc38e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsIaCoreSegment; @@ -102,9 +103,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsIaField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsIaField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsIaField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 03dea7c1..a4e57d2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsMtCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsMtField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsMtField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsMtField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 809f2569..64b6c8f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNatCoreSegment; @@ -114,14 +115,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsNatField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsNatField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getPersonalDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 36e9ff8b..a009def8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNeCoreSegment; @@ -98,9 +99,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsNeField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsNeField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsNeField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index b2f22d81..a907d2ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNhCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsNhField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsNhField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsNhField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index b694d403..c5c648ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNjCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsNjField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsNjField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsNjField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 3e14ca1a..41d0d3ce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsOrCoreSegment; @@ -98,14 +99,12 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsOrField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsOrField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsOrField.SENSITIVE_DATA_PROCESSING); } - @SuppressWarnings("unchecked") - public List getKnownChildSensitiveDataConsents() { - return (List) this.getFieldValue(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); + public FixedIntegerList getKnownChildSensitiveDataConsents() { + return (FixedIntegerList) this.getFieldValue(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS); } public Integer getAdditionalDataProcessingConsent() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 894f9ed9..23b17edf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsTnCoreSegment; @@ -98,9 +99,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsTnField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsTnField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsTnField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 0feec120..521ff729 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -3,6 +3,7 @@ import java.util.Arrays; import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsTxCoreSegment; @@ -98,9 +99,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsTxField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsTxField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsTxField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 96d2217b..05cc7836 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsUtCoreSegment; @@ -91,9 +92,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsUtField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsUtField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsUtField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index c144a2d3..95a0abd0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsVaCoreSegment; @@ -87,9 +88,8 @@ public Integer getTargetedAdvertisingOptOut() { return (Integer) this.getFieldValue(UsVaField.TARGETED_ADVERTISING_OPT_OUT); } - @SuppressWarnings("unchecked") - public List getSensitiveDataProcessing() { - return (List) this.getFieldValue(UsVaField.SENSITIVE_DATA_PROCESSING); + public FixedIntegerList getSensitiveDataProcessing() { + return (FixedIntegerList) this.getFieldValue(UsVaField.SENSITIVE_DATA_PROCESSING); } public Integer getKnownChildSensitiveDataConsents() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index b054ba04..d4f5f3c5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -2,7 +2,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.datatype.FixedList; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.Fields; @@ -10,7 +10,7 @@ public abstract class AbstractLazilyEncodableSegment> implem protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); - protected static final Predicate> nullableBooleanAsTwoBitIntegerListValidator = (l -> { + protected static final Predicate nullableBooleanAsTwoBitIntegerListValidator = (l -> { for (int n : l) { if (n < 0 || n > 2) { return false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index eafc1f12..0072a91f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsCaField.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 9) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0)) + fields.put(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 2) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsCaField.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 98e96fc9..deafdc52 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -41,7 +40,7 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCoField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0)) + fields.put(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 7) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index d6e27686..46535363 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsCtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsCtField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 534fbf28..6b935cf8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,10 +41,10 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsDeField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsDeField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 9) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 5) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 384d34ac..9e6e49b7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsFlField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsFlField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 530ccd13..087f0445 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -44,7 +43,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsIaField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsIaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 49d8813b..89cad156 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsMtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsMtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 5257d91e..3212b317 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -50,9 +49,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsNatField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNatField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 16) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsNatField.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index fb7b77a1..52d06230 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,7 +41,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsNeField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNeField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 789f86b5..44ce9219 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsNhField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNhField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 99f94205..3de4bb2f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsNjField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNjField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 10) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0)) + fields.put(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index f9ef489d..a1278600 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,9 +41,9 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsOrField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsOrField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 11) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0)) + fields.put(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index b6bd3409..c22afdf6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,7 +41,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsTnField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsTnField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 2b809263..8c67106a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,7 +41,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsTxField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsTxField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 368cfca5..27e42ca4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -44,7 +43,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsUtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsUtField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index b374520b..d0028cb6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import java.util.Arrays; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; @@ -42,7 +41,7 @@ protected EncodableBitStringFields initializeFields() { fields.put(UsVaField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsVaField.SENSITIVE_DATA_PROCESSING, - new EncodableFixedIntegerList(2, Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0)) + new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); From 8f8000184ff16447ecceddfc58330c6df759d513 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 12 Jan 2026 17:01:04 -0500 Subject: [PATCH 06/49] avoid itable calls to IntegerSet --- .../iab/gpp/encoder/bitstring/BitString.java | 3 +- .../EncodableFibonacciIntegerRange.java | 3 +- .../datatype/EncodableFixedBitfield.java | 3 +- .../datatype/EncodableFixedIntegerRange.java | 3 +- .../datatype/EncodableFlexibleBitfield.java | 3 +- .../EncodableOptimizedFixedRange.java | 3 +- .../iab/gpp/encoder/datatype/RangeEntry.java | 3 +- .../encoder/FibonacciIntegerRangeEncoder.java | 4 +- .../encoder/FixedIntegerRangeEncoder.java | 4 +- .../datatype/encoder/IntegerBitSet.java | 210 ----------------- .../datatype/encoder/IntegerCache.java | 2 +- .../encoder/datatype/encoder/IntegerSet.java | 220 ++++++++++++++++-- .../OptimizedFibonacciRangeEncoder.java | 4 +- .../encoder/OptimizedFixedRangeEncoder.java | 4 +- .../FibonacciIntegerRangeEncoderTest.java | 2 +- .../encoder/FixedBitfieldEncoderTest.java | 18 +- .../encoder/FixedIntegerRangeEncoderTest.java | 2 +- 17 files changed, 234 insertions(+), 257 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 8026d69c..77601d40 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.bitstring; import java.util.BitSet; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -46,7 +45,7 @@ public static final BitString of(String str) { } public IntegerSet toIntegerSet() { - return new IntegerBitSet(bitSet, from, to, 1); + return new IntegerSet(bitSet, from, to, 1); } @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 2c8df3c7..3bf4a54c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; @@ -15,7 +14,7 @@ public final class EncodableFibonacciIntegerRange extends AbstractDirtyableBitSt public EncodableFibonacciIntegerRange() { super(true); - this.value = new IntegerBitSet(); + this.value = new IntegerSet(); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 48615032..993d8551 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -16,7 +15,7 @@ public final class EncodableFixedBitfield extends AbstractDirtyableBitStringData public EncodableFixedBitfield(int numElements) { super(true); this.numElements = numElements; - this.value = new IntegerBitSet(numElements); + this.value = new IntegerSet(numElements); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 56b94487..66b9232f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; @@ -14,7 +13,7 @@ public final class EncodableFixedIntegerRange extends AbstractDirtyableBitString protected EncodableFixedIntegerRange() { super(true); - this.value = new IntegerBitSet(); + this.value = new IntegerSet(); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 04e8d8a5..9287d62d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -18,7 +17,7 @@ public final class EncodableFlexibleBitfield extends AbstractDirtyableBitStringD public EncodableFlexibleBitfield(IntSupplier getLengthSupplier) { super(true); this.getLengthSupplier = getLengthSupplier; - this.value = new IntegerBitSet(); + this.value = new IntegerSet(); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index 14b00485..aa716c37 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -3,7 +3,6 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; @@ -15,7 +14,7 @@ public final class EncodableOptimizedFixedRange extends AbstractDirtyableBitStri public EncodableOptimizedFixedRange() { super(true); - this.value = new IntegerBitSet(); + this.value = new IntegerSet(); } public void encode(BitStringBuilder builder) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index ed997b16..29e33eed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -3,7 +3,6 @@ import java.util.Collection; import java.util.Set; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -import com.iab.gpp.encoder.datatype.encoder.IntegerBitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; public class RangeEntry implements Dirtyable { @@ -17,7 +16,7 @@ public RangeEntry(int key, int type, Set ids) { super(); this.key = key; this.type = type; - this.ids = new IntegerBitSet(); + this.ids = new IntegerSet(); this.ids.addAll(ids); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 46b409bc..95dbf869 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -47,13 +47,13 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerBitSet decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - IntegerBitSet value = new IntegerBitSet(); + IntegerSet value = new IntegerSet(); int offset = 0; int startIndex = 12; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 6160fa12..a399ba49 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -43,13 +43,13 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerBitSet decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } int count = FixedIntegerEncoder.decode(bitString, 0, 12); - IntegerBitSet value = new IntegerBitSet(); + IntegerSet value = new IntegerSet(); int startIndex = 12; for (int i = 0; i < count; i++) { boolean group = BooleanEncoder.decode(bitString, startIndex, 1); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java index 663b28f8..6ae65a06 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java @@ -11,214 +11,4 @@ import java.util.stream.IntStream; import java.util.stream.StreamSupport; -public final class IntegerBitSet extends AbstractSet implements IntegerSet { - private static final Logger LOGGER = Logger.getLogger(IntegerBitSet.class.getName()); - static final int MAX_COLLECTION_SIZE = 8192; - - private boolean dirty; - private final BitSet bitSet; - private final int from; - private final int to; - private final int adjustment; - - public IntegerBitSet(BitSet bitSet, int from, int to, int adjustment) { - this.bitSet = bitSet; - this.from = from; - this.to = to; - this.adjustment = adjustment; - } - - public IntegerBitSet(int limit) { - this(new BitSet(0), 0, limit, 0); - } - - public IntegerBitSet() { - this(MAX_COLLECTION_SIZE); - } - - @Override - public int size() { - OfInt it = iterator(); - int count = 0; - while (it.hasNext()) { - it.next(); - count++; - } - return count; - } - - private int getOffset(int value) { - int offset = from - adjustment + value; - if (offset < from) { - throw new IndexOutOfBoundsException("Negative index provided"); - } - return offset; - } - - @Override - public void clear() { - dirty = true; - bitSet.clear(from, to); - } - - @Override - public boolean isEmpty() { - return bitSet.nextSetBit(from) == -1; - } - - @Override - public boolean containsInt(int value) { - int offset = getOffset(value); - return offset < to && bitSet.get(offset); - } - - @Override - public OfInt iterator() { - return new OfInt() { - int cursor = bitSet.nextSetBit(from); - - @Override - public boolean hasNext() { - return cursor < to && cursor != -1; - } - - @Override - public Integer next() { - return IntegerCache.valueOf(nextInt()); - } - - @Override - public int nextInt() { - if (!this.hasNext()) { - throw new NoSuchElementException(); - } - int next = cursor; - cursor = bitSet.nextSetBit(cursor + 1); - return next - from + adjustment; - } - }; - } - - @Override - public Spliterator.OfInt spliterator(){ - return Spliterators.spliteratorUnknownSize( - iterator(), - Spliterator.ORDERED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL); - } - - @Override - public IntStream intStream() { - return StreamSupport.intStream(spliterator(), false); - } - - private static final void logOutOfRange(int value) { - LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: "+ value); - } - - public void addRange(int start, int end) { - if (end < start) { - throw new IllegalArgumentException("Negative length range"); - } - int realStart = getOffset(start); - int realEnd = getOffset(end); - if (realStart >= to) { - logOutOfRange(start); - return; - } - if (realEnd > to) { - logOutOfRange(end); - realEnd = to; - } - dirty = true; - bitSet.set(realStart, realEnd); - } - - public boolean addInt(int value) { - int offset = getOffset(value); - if (offset >= to) { - logOutOfRange(value); - return false; - } - boolean present = bitSet.get(offset); - if (present) { - return false; - } - bitSet.set(offset, true); - dirty = true; - return true; - } - - public boolean removeInt(int value) { - int offset = getOffset(value); - if (offset >= to) { - logOutOfRange(value); - return false; - } - boolean present = bitSet.get(offset); - if (!present) { - return false; - } - bitSet.set(offset, false); - dirty = true; - return true; - } - - @Override - public final boolean contains(Object value) { - if (value instanceof Integer) { - return containsInt((Integer) value); - } - return false; - } - - @Override - public final boolean add(Integer value) { - if (value == null) { - return false; - } - return addInt(value); - } - - @Override - public final boolean remove(Object value) { - if (value instanceof Integer) { - return removeInt((Integer) value); - } - return false; - } - - @Override - public boolean removeAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } - - @Override - public boolean retainAll(Collection c) { - boolean modified = false; - for (Integer i : this) { - if (!c.contains(i)) { - remove(i); - modified = true; - } - } - return modified; - } - - @Override - public boolean isDirty() { - return dirty; - } - - @Override - public void setDirty(boolean dirty) { - this.dirty = dirty; - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java index d92823e5..07471ea2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerCache.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import static com.iab.gpp.encoder.datatype.encoder.IntegerBitSet.MAX_COLLECTION_SIZE; +import static com.iab.gpp.encoder.datatype.encoder.IntegerSet.MAX_COLLECTION_SIZE; final class IntegerCache { private IntegerCache() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 5f27795e..387f35fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -1,28 +1,222 @@ package com.iab.gpp.encoder.datatype.encoder; +import java.util.AbstractSet; +import java.util.BitSet; import java.util.Collection; -import java.util.PrimitiveIterator; -import java.util.Set; +import java.util.NoSuchElementException; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.PrimitiveIterator.OfInt; +import java.util.logging.Logger; import java.util.stream.IntStream; +import java.util.stream.StreamSupport; -public interface IntegerSet extends Set, Dirtyable { - boolean containsInt(int value); +public final class IntegerSet extends AbstractSet implements Dirtyable { + private static final Logger LOGGER = Logger.getLogger(IntegerSet.class.getName()); - default boolean containsAny(Collection c) { - for (Object e : c) { - if (!contains(e)) { - return false; + static final int MAX_COLLECTION_SIZE = 8192; + + private boolean dirty; + private final BitSet bitSet; + private final int from; + private final int to; + private final int adjustment; + + public IntegerSet(BitSet bitSet, int from, int to, int adjustment) { + this.bitSet = bitSet; + this.from = from; + this.to = to; + this.adjustment = adjustment; + } + + public IntegerSet(int limit) { + this(new BitSet(0), 0, limit, 0); + } + + public IntegerSet() { + this(MAX_COLLECTION_SIZE); + } + + @Override + public int size() { + OfInt it = iterator(); + int count = 0; + while (it.hasNext()) { + it.next(); + count++; + } + return count; + } + + private int getOffset(int value) { + int offset = from - adjustment + value; + if (offset < from) { + throw new IndexOutOfBoundsException("Negative index provided"); + } + return offset; + } + + @Override + public void clear() { + dirty = true; + bitSet.clear(from, to); + } + + @Override + public boolean isEmpty() { + return bitSet.nextSetBit(from) == -1; + } + + public boolean containsInt(int value) { + int offset = getOffset(value); + return offset < to && bitSet.get(offset); + } + + @Override + public OfInt iterator() { + return new OfInt() { + int cursor = bitSet.nextSetBit(from); + + @Override + public boolean hasNext() { + return cursor < to && cursor != -1; + } + + @Override + public Integer next() { + return IntegerCache.valueOf(nextInt()); } + + @Override + public int nextInt() { + if (!this.hasNext()) { + throw new NoSuchElementException(); + } + int next = cursor; + cursor = bitSet.nextSetBit(cursor + 1); + return next - from + adjustment; + } + }; + } + + @Override + public Spliterator.OfInt spliterator(){ + return Spliterators.spliteratorUnknownSize( + iterator(), + Spliterator.ORDERED | Spliterator.DISTINCT | Spliterator.IMMUTABLE | Spliterator.NONNULL); + } + + public IntStream intStream() { + return StreamSupport.intStream(spliterator(), false); + } + + private static final void logOutOfRange(int value) { + LOGGER.warning("Exceeding IntegerBitSet.MAX_COLLECTION_SIZE: "+ value); + } + + public void addRange(int start, int end) { + if (end < start) { + throw new IllegalArgumentException("Negative length range"); + } + int realStart = getOffset(start); + int realEnd = getOffset(end); + if (realStart >= to) { + logOutOfRange(start); + return; + } + if (realEnd > to) { + logOutOfRange(end); + realEnd = to; + } + dirty = true; + bitSet.set(realStart, realEnd); + } + + public boolean addInt(int value) { + int offset = getOffset(value); + if (offset >= to) { + logOutOfRange(value); + return false; + } + boolean present = bitSet.get(offset); + if (present) { + return false; + } + bitSet.set(offset, true); + dirty = true; + return true; + } + + public boolean removeInt(int value) { + int offset = getOffset(value); + if (offset >= to) { + logOutOfRange(value); + return false; } + boolean present = bitSet.get(offset); + if (!present) { + return false; + } + bitSet.set(offset, false); + dirty = true; return true; } - boolean addInt(int value); + @Override + public final boolean contains(Object value) { + if (value instanceof Integer) { + return containsInt((Integer) value); + } + return false; + } + + @Override + public final boolean add(Integer value) { + if (value == null) { + return false; + } + return addInt(value); + } + + @Override + public final boolean remove(Object value) { + if (value instanceof Integer) { + return removeInt((Integer) value); + } + return false; + } + + @Override + public boolean removeAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } - boolean removeInt(int value); + @Override + public boolean retainAll(Collection c) { + boolean modified = false; + for (Integer i : this) { + if (!c.contains(i)) { + remove(i); + modified = true; + } + } + return modified; + } - IntStream intStream(); + @Override + public boolean isDirty() { + return dirty; + } @Override - PrimitiveIterator.OfInt iterator(); -} + public void setDirty(boolean dirty) { + this.dirty = dirty; + } +} \ No newline at end of file diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java index 9240bee7..a0b8494e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java @@ -28,7 +28,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerBitSet decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); } @@ -38,7 +38,7 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException } else { BitString bits = bitString.substring(17); int length = bits.length(); - IntegerBitSet value = new IntegerBitSet(); + IntegerSet value = new IntegerSet(); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { value.addInt(i + 1); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 3126c60d..607ace29 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -27,7 +27,7 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerBitSet decode(BitString bitString) throws DecodingException { + public static IntegerSet decode(BitString bitString) throws DecodingException { if (bitString.length() < 12) { throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); } @@ -37,7 +37,7 @@ public static IntegerBitSet decode(BitString bitString) throws DecodingException } else { BitString bits = bitString.substring(17); int length = bits.length(); - IntegerBitSet value = new IntegerBitSet(); + IntegerSet value = new IntegerSet(); for (int i = 0; i < length; i++) { if (bits.getValue(i)) { value.addInt(i + 1); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index b8ad0b2f..0579095b 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -43,7 +43,7 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FibonacciIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("000000000010001110011011", builder.build().toString()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index a0549270..1a18454f 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -13,7 +13,7 @@ public class FixedBitfieldEncoderTest { @Test public void testEncode1() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("00", builder.build().toString()); } @@ -21,7 +21,7 @@ public void testEncode1() { @Test public void testEncode2() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 1); Assertions.assertEquals("0", builder.build().toString()); } @@ -29,7 +29,7 @@ public void testEncode2() { @Test public void testEncode3() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.add(0); FixedBitfieldEncoder.encode(builder, set, 1); Assertions.assertEquals("1", builder.build().toString()); @@ -38,7 +38,7 @@ public void testEncode3() { @Test public void testEncode4() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("00", builder.build().toString()); } @@ -46,7 +46,7 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("01", builder.build().toString()); @@ -55,7 +55,7 @@ public void testEncode5() { @Test public void testEncode6() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addInt(0); FixedBitfieldEncoder.encode(builder, set, 2); Assertions.assertEquals("10", builder.build().toString()); @@ -64,7 +64,7 @@ public void testEncode6() { @Test public void testEncode7() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addInt(0); set.addInt(1); FixedBitfieldEncoder.encode(builder, set, 2); @@ -73,7 +73,7 @@ public void testEncode7() { @Test public void testEncode8() { - IntegerSet set = new IntegerBitSet(5); + IntegerSet set = new IntegerSet(5); for(int i = 0; i <= 10; i++) { set.addInt(i); } @@ -82,7 +82,7 @@ public void testEncode8() { @Test public void testEncode9() { - IntegerBitSet set = new IntegerBitSet(5); + IntegerSet set = new IntegerSet(5); set.addRange(0,10); Assertions.assertEquals(Set.of(0,1,2,3,4), set); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 7fe4db47..7f187b7a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -45,7 +45,7 @@ public void testEncode4() { @Test public void testEncode5() { BitStringBuilder builder = new BitStringBuilder(); - IntegerSet set = new IntegerBitSet(); + IntegerSet set = new IntegerSet(); set.addAll(Arrays.asList(6, 7, 2, 5)); FixedIntegerRangeEncoder.encode(builder, set); Assertions.assertEquals("00000000001000000000000000010100000000000001010000000000000111", From 15153777c4ff1ab7bc4fd13c0c2b3394b83e4a43 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 13:28:08 -0500 Subject: [PATCH 07/49] update tests --- .../iab/gpp/encoder/datatype/FixedList.java | 9 ++-- .../datatype/encoder/IntegerBitSet.java | 14 ------ .../datatype/FixedIntegerListTest.java | 32 ++++++++++++ .../gpp/encoder/datatype/FixedListTest.java | 33 ++++++++++++ .../datatype/encoder/IntegerSetTest.java | 50 +++++++++++++++++++ 5 files changed, 118 insertions(+), 20 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java create mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java create mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java create mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java index 962feb0e..c5ea40c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java @@ -4,7 +4,7 @@ import java.util.List; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -public final class FixedList extends AbstractList implements Dirtyable { +public final class FixedList extends AbstractList implements Dirtyable { private boolean dirty; private final List delegate; @@ -40,7 +40,7 @@ public boolean isDirty() { int size = delegate.size(); for (int i = 0; i < size; i++) { T value = delegate.get(i); - if (value instanceof Dirtyable && ((Dirtyable) value).isDirty()) { + if (value.isDirty()) { return true; } } @@ -51,10 +51,7 @@ public boolean isDirty() { public void setDirty(boolean dirty) { int size = delegate.size(); for (int i = 0; i < size; i++) { - T value = delegate.get(i); - if (value instanceof Dirtyable) { - ((Dirtyable) value).setDirty(dirty); - } + delegate.get(i).setDirty(dirty); } this.dirty = dirty; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java deleted file mode 100644 index 6ae65a06..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerBitSet.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import java.util.AbstractSet; -import java.util.BitSet; -import java.util.Collection; -import java.util.NoSuchElementException; -import java.util.Spliterator; -import java.util.Spliterators; -import java.util.logging.Logger; -import java.util.PrimitiveIterator.OfInt; -import java.util.stream.IntStream; -import java.util.stream.StreamSupport; - - diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java new file mode 100644 index 00000000..166c48e4 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java @@ -0,0 +1,32 @@ +package com.iab.gpp.encoder.datatype; + +import static org.junit.jupiter.api.Assertions.*; +import java.util.List; +import org.junit.jupiter.api.Test; + +class FixedIntegerListTest { + + @Test + void test() { + FixedIntegerList list = new FixedIntegerList(5); + assertFalse(list.isDirty()); + list.set(0, 2); + list.set(1, 1); + list.set(2, 5); + list.set(3, 8); + list.set(4, 3); + assertThrows(IllegalArgumentException.class, () -> list.set(4, Integer.MAX_VALUE)); + assertThrows(IllegalArgumentException.class, () -> list.set(4, -1)); + assertEquals(5, list.size()); + assertEquals(List.of(2,1,5,8,3), list); + assertEquals(2, list.get(0)); + assertEquals(1, list.get(1)); + assertEquals(5, list.get(2)); + assertEquals(8, list.get(3)); + assertEquals(3, list.get(4)); + assertTrue(list.isDirty()); + list.setDirty(false); + assertFalse(list.isDirty()); + } + +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java new file mode 100644 index 00000000..ad1c14b7 --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java @@ -0,0 +1,33 @@ +package com.iab.gpp.encoder.datatype; + +import static org.junit.jupiter.api.Assertions.*; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.Test; + +class FixedListTest { + + @Test + void test() { + RangeEntry item1 = new RangeEntry(1, 2, Set.of(3,4,5)); + RangeEntry item2 = new RangeEntry(6, 7, Set.of(8,9,10)); + RangeEntry item3 = new RangeEntry(11, 12, Set.of(13,14,15)); + FixedList list = new FixedList<>(Arrays.asList(new RangeEntry[] {item1, item2, item3})); + assertEquals(List.of(item1, item2, item3), list); + assertEquals(item1, list.get(0)); + assertEquals(item2, list.get(1)); + assertEquals(item3, list.get(2)); + assertEquals(3, list.size()); + assertFalse(list.isEmpty()); + assertTrue(list.isDirty()); + list.setDirty(false); + assertFalse(list.isDirty()); + item2.getIds().remove(9); + assertTrue(list.isDirty()); + RangeEntry item2a = new RangeEntry(100, 200, Set.of(300,400,500)); + assertEquals(item2, list.set(1, item2a)); + assertEquals(item2a, list.get(1)); + } + +} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java new file mode 100644 index 00000000..7d4cdb3c --- /dev/null +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/IntegerSetTest.java @@ -0,0 +1,50 @@ +package com.iab.gpp.encoder.datatype.encoder; + +import static org.junit.jupiter.api.Assertions.*; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.Test; + +class IntegerSetTest { + + @Test + void test() { + IntegerSet set = new IntegerSet(5); + assertFalse(set.isDirty()); + assertTrue(set.isEmpty()); + set.add(0); + set.add(2); + set.add(3); + assertEquals(Set.of(0,2,3), set); + assertTrue(set.isDirty()); + assertFalse(set.isEmpty()); + assertEquals(3, set.size()); + assertFalse(set.remove(1)); + assertTrue(set.remove(2)); + assertEquals(2, set.size()); + set.addAll(List.of(3,4)); + assertEquals(Set.of(0,3,4), set); + List out = new ArrayList<>(); + Iterator it = set.iterator(); + it.forEachRemaining(out::add); + assertEquals(List.of(0,3,4), out); + assertFalse(set.contains(2)); + assertTrue(set.contains(3)); + assertTrue(set.isDirty()); + set.setDirty(false); + assertFalse(set.isDirty()); + set.retainAll(Set.of(1,2,3)); + assertEquals(Set.of(3), set); + assertTrue(set.addAll(List.of(1,3,4))); + assertFalse(set.addAll(List.of(1,3,4))); + assertTrue(set.removeAll(List.of(3,4))); + assertEquals(Set.of(1), set); + set.clear(); + assertTrue(set.isEmpty()); + set.addRange(1, 3); + assertEquals(Set.of(1,2), set); + } + +} From 74870a8c995bcfe76cf9aca0c845ff4c4ce14946 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 14:26:53 -0500 Subject: [PATCH 08/49] fixed signed byte int limit --- .../java/com/iab/gpp/encoder/datatype/FixedIntegerList.java | 5 +++-- .../com/iab/gpp/encoder/datatype/FixedIntegerListTest.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index 3d04802b..4ad15042 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -33,8 +33,9 @@ public Integer set(int index, Integer value) { } public int setInt(int index, int value) { - if(value < 0 || value > 0xff) { - throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 256."); + // NOTE: int 128 is prevented since it would get turned into byte -128 + if(value < 0 || value > 128) { + throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 128."); } int prior = array[index]; array[index] = (byte) value; diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java index 166c48e4..6aee9b3e 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedIntegerListTest.java @@ -15,7 +15,7 @@ void test() { list.set(2, 5); list.set(3, 8); list.set(4, 3); - assertThrows(IllegalArgumentException.class, () -> list.set(4, Integer.MAX_VALUE)); + assertThrows(IllegalArgumentException.class, () -> list.set(4, 128)); assertThrows(IllegalArgumentException.class, () -> list.set(4, -1)); assertEquals(5, list.size()); assertEquals(List.of(2,1,5,8,3), list); From 92cbd01d0c8b2d4e8cc9f4504e0bdee874ff1021 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 14:42:57 -0500 Subject: [PATCH 09/49] javadoc --- .../java/com/iab/gpp/encoder/datatype/FixedIntegerList.java | 4 ++++ .../java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index 4ad15042..c463f0c7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -4,6 +4,10 @@ import java.util.Arrays; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; +/** + * An optimized implementation of {@literal List} of fixed size. + * Use {@link #getInt(int)} and {@link #setInt(int, int)} for efficient access. + */ public final class FixedIntegerList extends AbstractList implements Dirtyable { private boolean dirty; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 387f35fe..340252e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -11,6 +11,10 @@ import java.util.stream.IntStream; import java.util.stream.StreamSupport; +/** + * An optimized implementation of {@literal Set} backed by a {@link java.util.BitSet}. + * Use {@link #containsInt(int)}, {@link #addInt(int)}, and {@link #removeInt(int)} for efficient access. + */ public final class IntegerSet extends AbstractSet implements Dirtyable { private static final Logger LOGGER = Logger.getLogger(IntegerSet.class.getName()); From 5070310e556a7643c9617fc9a166125b02b5a763 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 15:23:35 -0500 Subject: [PATCH 10/49] DirtyableList --- .../gpp/encoder/datatype/DirtyableList.java | 103 ++++++++++++++++++ .../EncodableArrayOfFixedIntegerRanges.java | 17 +-- .../iab/gpp/encoder/datatype/FixedList.java | 58 ---------- .../iab/gpp/encoder/datatype/RangeEntry.java | 12 +- ...edListTest.java => DirtyableListTest.java} | 11 +- 5 files changed, 126 insertions(+), 75 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java rename iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/{FixedListTest.java => DirtyableListTest.java} (75%) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java new file mode 100644 index 00000000..dffbb74d --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DirtyableList.java @@ -0,0 +1,103 @@ +package com.iab.gpp.encoder.datatype; + +import java.util.AbstractList; +import java.util.ArrayList; +import java.util.Collection; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +// This class tracks whether a list has been modified. +final class DirtyableList extends AbstractList implements Dirtyable { + + private boolean dirty; + private final ArrayList delegate; + + DirtyableList() { + this.delegate = new ArrayList<>(); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public boolean add(T value) { + boolean result = delegate.add(value); + dirty = true; + return result; + } + + @Override + public T get(int index) { + return delegate.get(index); + } + + @Override + public T set(int index, T value) { + T prior = delegate.set(index, value); + dirty = true; + return prior; + } + + @Override + public void add(int index, T element) { + delegate.add(index, element); + dirty = true; + } + + @Override + public T remove(int index) { + T old = delegate.remove(index); + dirty = true; + return old; + } + + @Override + public int indexOf(Object o) { + return delegate.indexOf(o); + } + + @Override + public int lastIndexOf(Object o) { + return delegate.lastIndexOf(o); + } + + @Override + public void clear() { + delegate.clear(); + dirty = true; + } + + @Override + public boolean addAll(Collection c) { + boolean result = delegate.addAll(c); + dirty = true; + return result; + } + + @Override + public String toString() { + return delegate.toString(); + } + + @Override + public boolean isDirty() { + int size = delegate.size(); + for (int i = 0; i < size; i++) { + T value = delegate.get(i); + if (value.isDirty()) { + return true; + } + } + return dirty; + } + + @Override + public void setDirty(boolean dirty) { + int size = delegate.size(); + for (int i = 0; i < size; i++) { + delegate.get(i).setDirty(dirty); + } + this.dirty = dirty; + } +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index b1035592..b76026d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.bitstring.BitString; @@ -11,18 +10,16 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; -public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { +public final class EncodableArrayOfFixedIntegerRanges extends AbstractDirtyableBitStringDataType> { private int keyBitStringLength; private int typeBitStringLength; - private static final FixedList EMPTY = new FixedList<>(List.of()); - public EncodableArrayOfFixedIntegerRanges(int keyBitStringLength, int typeBitStringLength, boolean hardFailIfMissing) { super(hardFailIfMissing); this.keyBitStringLength = keyBitStringLength; this.typeBitStringLength = typeBitStringLength; - this.value = EMPTY; + this.value = new DirtyableList<>(); } @Override @@ -46,7 +43,7 @@ public void encode(BitStringBuilder sb) { public void decode(BitString bitString) { try { int size = FixedIntegerEncoder.decode(bitString, 0, 12); - RangeEntry[] entries = new RangeEntry[size]; + value.clear(); int index = 12; for (int i = 0; i < size; i++) { int key = FixedIntegerEncoder.decode(bitString, index, keyBitStringLength); @@ -60,11 +57,8 @@ public void decode(BitString bitString) { index += substring.length(); RangeEntry entry = new RangeEntry(key, type, ids); - entries[i] = entry; + value.add(entry); } - - // NOTE: this requires that adding/removing ranges uses the setter - this.value = new FixedList<>(Arrays.asList(entries)); } catch (Exception e) { throw new DecodingException(e); } @@ -103,6 +97,7 @@ public BitString substring(BitString bitString, int fromIndex) throws SubstringE @SuppressWarnings("unchecked") @Override public void setValue(Object value) { - super.setValue(new FixedList<>((List) value)); + this.value.clear(); + this.value.addAll((List) value); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java deleted file mode 100644 index c5ea40c9..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedList.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import java.util.AbstractList; -import java.util.List; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; - -public final class FixedList extends AbstractList implements Dirtyable { - - private boolean dirty; - private final List delegate; - - FixedList(List delegate) { - this.delegate = delegate; - } - - @Override - public int size() { - return delegate.size(); - } - - @Override - public T get(int index) { - return delegate.get(index); - } - - @Override - public T set(int index, T value) { - T prior = delegate.set(index, value); - dirty = true; - return prior; - } - - @Override - public String toString() { - return delegate.toString(); - } - - @Override - public boolean isDirty() { - int size = delegate.size(); - for (int i = 0; i < size; i++) { - T value = delegate.get(i); - if (value.isDirty()) { - return true; - } - } - return dirty; - } - - @Override - public void setDirty(boolean dirty) { - int size = delegate.size(); - for (int i = 0; i < size; i++) { - delegate.get(i).setDirty(dirty); - } - this.dirty = dirty; - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java index 29e33eed..027934f8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/RangeEntry.java @@ -1,18 +1,17 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import java.util.Set; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -public class RangeEntry implements Dirtyable { +public final class RangeEntry implements Dirtyable { private boolean dirty; private int key; private int type; private final IntegerSet ids; - public RangeEntry(int key, int type, Set ids) { + public RangeEntry(int key, int type, Collection ids) { super(); this.key = key; this.type = type; @@ -20,6 +19,13 @@ public RangeEntry(int key, int type, Set ids) { this.ids.addAll(ids); } + RangeEntry(int key, int type, IntegerSet ids) { + super(); + this.key = key; + this.type = type; + this.ids = ids; + } + public int getKey() { return key; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java similarity index 75% rename from iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java rename to iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java index ad1c14b7..dbbc28b0 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/FixedListTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/DirtyableListTest.java @@ -1,19 +1,20 @@ package com.iab.gpp.encoder.datatype; import static org.junit.jupiter.api.Assertions.*; -import java.util.Arrays; import java.util.List; import java.util.Set; import org.junit.jupiter.api.Test; -class FixedListTest { +class DirtyableListTest { @Test void test() { RangeEntry item1 = new RangeEntry(1, 2, Set.of(3,4,5)); RangeEntry item2 = new RangeEntry(6, 7, Set.of(8,9,10)); RangeEntry item3 = new RangeEntry(11, 12, Set.of(13,14,15)); - FixedList list = new FixedList<>(Arrays.asList(new RangeEntry[] {item1, item2, item3})); + DirtyableList list = new DirtyableList<>(); + list.add(item1); + list.addAll(List.of(item2, item3)); assertEquals(List.of(item1, item2, item3), list); assertEquals(item1, list.get(0)); assertEquals(item2, list.get(1)); @@ -28,6 +29,10 @@ void test() { RangeEntry item2a = new RangeEntry(100, 200, Set.of(300,400,500)); assertEquals(item2, list.set(1, item2a)); assertEquals(item2a, list.get(1)); + assertEquals(item3, list.remove(2)); + assertEquals(2, list.size()); + list.add(item3); + assertEquals(List.of(item1, item2a, item3), list); } } From 06f6c2843abe35ecc0c026b3850f2addfc3cb92b Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 13 Jan 2026 15:25:04 -0500 Subject: [PATCH 11/49] fix test --- .../java/com/iab/gpp/encoder/datatype/FixedIntegerList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java index c463f0c7..9e6176e4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/FixedIntegerList.java @@ -38,7 +38,7 @@ public Integer set(int index, Integer value) { public int setInt(int index, int value) { // NOTE: int 128 is prevented since it would get turned into byte -128 - if(value < 0 || value > 128) { + if(value < 0 || value >= 128) { throw new IllegalArgumentException("FixedIntegerList only supports positive integers less than 128."); } int prior = array[index]; From 2b97c419dd2180c7a5fc8f562f418f56536e5a5a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 15 Jan 2026 18:32:25 -0500 Subject: [PATCH 12/49] remove substring --- .../iab/gpp/encoder/bitstring/BitString.java | 53 ++------------- .../encoder/bitstring/BitStringBuilder.java | 2 +- .../encoder/bitstring/BitStringEncoder.java | 13 +--- .../encoder/bitstring/BitStringReader.java | 49 ++++++++++++++ .../AbstractEncodableBitStringDataType.java | 2 - .../EncodableArrayOfFixedIntegerRanges.java | 50 ++------------ .../encoder/datatype/EncodableBoolean.java | 13 +--- .../encoder/datatype/EncodableDataType.java | 4 +- .../encoder/datatype/EncodableDatetime.java | 13 +--- .../datatype/EncodableFibonacciInteger.java | 18 +---- .../EncodableFibonacciIntegerRange.java | 22 +----- .../datatype/EncodableFixedBitfield.java | 13 +--- .../datatype/EncodableFixedInteger.java | 13 +--- .../datatype/EncodableFixedIntegerList.java | 13 +--- .../datatype/EncodableFixedIntegerRange.java | 22 +----- .../datatype/EncodableFixedString.java | 13 +--- .../datatype/EncodableFlexibleBitfield.java | 12 +--- .../EncodableOptimizedFibonacciRange.java | 67 ------------------- .../EncodableOptimizedFixedRange.java | 21 +----- .../encoder/datatype/SubstringException.java | 18 ----- .../encoder/datatype/UnencodableBoolean.java | 6 +- .../datatype/encoder/DatetimeEncoder.java | 9 +-- .../encoder/FibonacciIntegerEncoder.java | 11 ++- .../encoder/FibonacciIntegerRangeEncoder.java | 29 ++------ .../encoder/FixedBitfieldEncoder.java | 5 +- .../datatype/encoder/FixedIntegerEncoder.java | 6 +- .../encoder/FixedIntegerListEncoder.java | 31 ++------- .../encoder/FixedIntegerRangeEncoder.java | 26 ++----- .../datatype/encoder/FixedLongEncoder.java | 6 +- .../datatype/encoder/FixedStringEncoder.java | 11 +-- .../OptimizedFibonacciRangeEncoder.java | 50 -------------- .../encoder/OptimizedFixedRangeEncoder.java | 22 ++---- .../gpp/encoder/segment/UsNatCoreSegment.java | 18 ++--- .../datatype/EncodableBooleanTest.java | 22 ------ .../datatype/EncodableDatetimeTest.java | 23 ------- .../EncodableFibonacciIntegerRangeTest.java | 16 ----- .../datatype/EncodableFixedBitfieldTest.java | 20 ------ .../EncodableFixedIntegerListTest.java | 20 ------ .../EncodableFixedIntegerRangeTest.java | 19 +----- .../datatype/EncodableFixedIntegerTest.java | 20 ------ .../datatype/EncodableFixedStringTest.java | 20 ------ .../EncodableOptimizedFixedRangeTest.java | 23 ++----- .../datatype/encoder/DatetimeEncoderTest.java | 3 +- .../encoder/FibonacciIntegerEncoderTest.java | 27 +++++--- .../FibonacciIntegerRangeEncoderTest.java | 21 +++--- .../encoder/FixedBitfieldEncoderTest.java | 21 +++--- .../encoder/FixedIntegerEncoderTest.java | 19 ++++-- .../encoder/FixedIntegerListEncoderTest.java | 48 +++++++------ .../encoder/FixedIntegerRangeEncoderTest.java | 28 ++++---- .../encoder/FixedLongEncoderTest.java | 21 +++--- .../encoder/FixedStringEncoderTest.java | 11 ++- 51 files changed, 282 insertions(+), 761 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/SubstringException.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java delete mode 100644 iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 77601d40..c12d7132 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -9,23 +9,13 @@ public final class BitString { public static final char FALSE = '0'; public static final String TRUE_STRING = new String(new char[] {TRUE}); public static final String FALSE_STRING = new String(new char[] {FALSE}); - private static final BitString EMPTY = new BitString(new BitSet(), 0, 0); private final BitSet bitSet; - private final int from; - private final int to; + private final int length; - BitString(BitSet bitSet, int from, int to) { + BitString(BitSet bitSet, int length) { this.bitSet = bitSet; - this.from = from; - this.to = to; - } - - public static final BitString empty(int size) { - if (size == 0) { - return EMPTY; - } - return new BitString(new BitSet(size), 0, size); + this.length = length; } public static final BitString of(String str) { @@ -44,54 +34,25 @@ public static final BitString of(String str) { return builder.build(); } - public IntegerSet toIntegerSet() { + public IntegerSet toIntegerSet(int from, int to) { return new IntegerSet(bitSet, from, to, 1); } @Override public String toString() { StringBuilder sb = new StringBuilder(length()); - for (int i = from; i < to; i++) { + for (int i = 0; i < length; i++) { sb.append(bitSet.get(i) ? TRUE : FALSE); } return sb.toString(); } public boolean getValue(int i) { - return bitSet.get(from + i); + return bitSet.get(i); } public int length() { - return to - from; - } - - public BitString substring(int i) { - return substring(i, length()); - } - - public BitString substring(int newFrom, int newTo) { - int length = length(); - if (newFrom > newTo || newFrom < 0 || newFrom > length || newTo > length) { - throw new IllegalArgumentException("Invalid substring"); - } - int oldFrom = this.from; - return new BitString(bitSet, oldFrom + newFrom, oldFrom + newTo); - } - - public BitString expandTo(int target) { - int needed = target - length(); - if (needed == 0) { - return this; - } - if (needed < 0) { - return substring(0, target); - } - BitStringBuilder sb = new BitStringBuilder(target); - sb.append(this); - for (int i = 0; i < needed; i++) { - sb.append(false); - } - return sb.build(); + return length; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java index 88d0ffaa..bf780ff4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java @@ -15,7 +15,7 @@ public BitStringBuilder() { } public BitString build() { - return new BitString(bitSet, 0, length); + return new BitString(bitSet, length); } public BitStringBuilder append(boolean value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java index 79ce4ef6..437bb046 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java @@ -2,7 +2,6 @@ import java.util.List; import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; -import com.iab.gpp.encoder.datatype.SubstringException; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; @@ -35,21 +34,13 @@ public BitStringBuilder encode(EncodableBitStringFields fields) { } public void decode(BitString bitString, EncodableBitStringFields fields) { - int index = 0; List fieldNames = fields.getNames(); + BitStringReader reader = new BitStringReader(bitString); for (int i = 0; i < fieldNames.size(); i++) { AbstractEncodableBitStringDataType field = fields.get(i); if (field != null) { try { - BitString substring = field.substring(bitString, index); - field.decode(substring); - index += substring.length(); - } catch (SubstringException e) { - if(field.getHardFailIfMissing()) { - throw new DecodingException("Unable to decode " + fieldNames.get(i), e); - } else { - return; - } + field.decode(reader); } catch (Exception e) { throw new DecodingException("Unable to decode " + fieldNames.get(i), e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java new file mode 100644 index 00000000..1869e76a --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java @@ -0,0 +1,49 @@ +package com.iab.gpp.encoder.bitstring; + +import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; +import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; + +public final class BitStringReader { + + private int offset = 0; + private final BitString bitString; + + public BitStringReader(BitString bitString) { + this.bitString = bitString; + } + + public int readInt(int length) { + int newOffset = offset + length; + int out = FixedIntegerEncoder.decode(bitString, offset, newOffset); + offset = newOffset; + return out; + } + + public long readLong(int length) { + int newOffset = offset + length; + long out = FixedLongEncoder.decode(bitString, offset, newOffset); + offset = newOffset; + return out; + } + + public boolean readBool() { + return bitString.getValue(offset++); + } + + public int readFibonacci() { + int indexOfEndTag = FibonacciIntegerEncoder.indexOfEndTag(bitString, offset) + 2; + int out = FibonacciIntegerEncoder.decode(bitString, offset, indexOfEndTag); + offset = indexOfEndTag; + return out; + } + + public IntegerSet readIntegerSet(int length) { + int newOffset = offset + length; + IntegerSet out = bitString.toIntegerSet(offset, newOffset); + offset = newOffset; + return out; + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 48cf6922..5510871c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -52,8 +52,6 @@ public final boolean getHardFailIfMissing() { return this.hardFailIfMissing; } - public abstract BitString substring(BitString bitString, int fromIndex) throws SubstringException; - public boolean isDirty() { return dirty; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java index b76026d1..e004db1c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableArrayOfFixedIntegerRanges.java @@ -2,8 +2,8 @@ import java.util.List; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; @@ -40,22 +40,14 @@ public void encode(BitStringBuilder sb) { } @Override - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - int size = FixedIntegerEncoder.decode(bitString, 0, 12); + int size = reader.readInt(12); value.clear(); - int index = 12; for (int i = 0; i < size; i++) { - int key = FixedIntegerEncoder.decode(bitString, index, keyBitStringLength); - index += keyBitStringLength; - - int type = FixedIntegerEncoder.decode(bitString, index, typeBitStringLength); - index += typeBitStringLength; - - BitString substring = new EncodableFixedIntegerRange().substring(bitString, index); - IntegerSet ids = FixedIntegerRangeEncoder.decode(substring); - index += substring.length(); - + int key = reader.readInt(keyBitStringLength); + int type = reader.readInt(typeBitStringLength); + IntegerSet ids = FixedIntegerRangeEncoder.decode(reader); RangeEntry entry = new RangeEntry(key, type, ids); value.add(entry); } @@ -64,36 +56,6 @@ public void decode(BitString bitString) { } } - @Override - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - BitStringBuilder sb = new BitStringBuilder(); - BitString lengthString = bitString.substring(fromIndex, fromIndex + 12); - sb.append(lengthString); - - int size = FixedIntegerEncoder.decode(lengthString); - - int index = fromIndex + lengthString.length(); - for (int i = 0; i < size; i++) { - BitString keySubstring = bitString.substring(index, index + keyBitStringLength); - index += keySubstring.length(); - sb.append(keySubstring); - - BitString typeSubstring = bitString.substring(index, index + typeBitStringLength); - index += typeSubstring.length(); - sb.append(typeSubstring); - - BitString rangeSubstring = new EncodableFixedIntegerRange().substring(bitString, index); - index += rangeSubstring.length(); - sb.append(rangeSubstring); - } - - return sb.build(); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 3c418fd8..df96560b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -21,19 +22,11 @@ public void encode(BitStringBuilder builder){ } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = BooleanEncoder.decode(bitString); + this.value = reader.readBool(); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + 1); - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java index 530ae121..bab54fd5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java @@ -1,10 +1,10 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; public interface EncodableDataType extends DataType { void encode(BitStringBuilder builder); - void decode(BitString str); + void decode(BitStringReader reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index 9a158820..bf677028 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -27,19 +28,11 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = DatetimeEncoder.decode(bitString); + this.value = DatetimeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + 36); - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index c0106dc9..02924acf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -30,24 +31,11 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FibonacciIntegerEncoder.decode(bitString); + this.value = reader.readFibonacci(); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, fromIndex); - if (index > 0) { - return bitString.substring(fromIndex, index + 2); - } else { - return bitString; - } - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 3bf4a54c..6a36ad6b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; @@ -25,31 +26,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FibonacciIntegerRangeEncoder.decode(bitString); + this.value = FibonacciIntegerRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int count = FixedIntegerEncoder.decode(bitString, fromIndex, 12); - int index = fromIndex + 12; - for (int i = 0; i < count; i++) { - if (bitString.getValue(index)) { - index = FibonacciIntegerEncoder.indexOfEndTag(bitString, FibonacciIntegerEncoder.indexOfEndTag(bitString, index + 1) + 2) + 2; - } else { - index = FibonacciIntegerEncoder.indexOfEndTag(bitString, index + 1) + 2; - } - } - return bitString.substring(fromIndex, index); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 993d8551..9d328753 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -26,22 +27,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedBitfieldEncoder.decode(bitString); + this.value = reader.readIntegerSet(this.numElements); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + this.numElements); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index d6dc9775..5d9beb20 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -29,19 +30,11 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedIntegerEncoder.decode(bitString); + this.value = reader.readInt(bitStringLength); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + this.bitStringLength); - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index c15ad1d6..7d95c260 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,22 +29,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - FixedIntegerListEncoder.decode(this.value, bitString, this.elementBitStringLength, this.numElements); + FixedIntegerListEncoder.decode(this.value, reader, this.elementBitStringLength); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + (this.elementBitStringLength * numElements)); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index 66b9232f..c53bf0e0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; @@ -24,31 +25,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedIntegerRangeEncoder.decode(bitString); + this.value = FixedIntegerRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int count = FixedIntegerEncoder.decode(bitString, fromIndex, 12); - int index = fromIndex + 12; - for (int i = 0; i < count; i++) { - if (bitString.getValue(index)) { - index += 33; - } else { - index += 17; - } - } - return bitString.substring(fromIndex, index); - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 7221078c..36b54442 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -29,19 +30,11 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedStringEncoder.decode(bitString); + this.value = FixedStringEncoder.decode(reader, this.stringLength); } catch (Exception e) { throw new DecodingException(e); } } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + this.stringLength * 6); - } catch (Exception e) { - throw new SubstringException(e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 9287d62d..31a56bed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; @@ -28,21 +29,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = FixedBitfieldEncoder.decode(bitString); + this.value = reader.readIntegerSet(getLengthSupplier.getAsInt()); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - return bitString.substring(fromIndex, fromIndex + this.getLengthSupplier.getAsInt()); - } catch (Exception e) { - throw new SubstringException(e); - } - } @SuppressWarnings("unchecked") @Override diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java deleted file mode 100644 index d966ad66..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFibonacciRange.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import java.util.Collection; -import java.util.List; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; -import com.iab.gpp.encoder.datatype.encoder.OptimizedFibonacciRangeEncoder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; - -public final class EncodableOptimizedFibonacciRange extends AbstractDirtyableBitStringDataType { - - protected EncodableOptimizedFibonacciRange() { - super(true); - } - - public EncodableOptimizedFibonacciRange(List value) { - super(true); - setValue(value); - } - - public EncodableOptimizedFibonacciRange(List value, boolean hardFailIfMissing) { - super(hardFailIfMissing); - setValue(value); - } - - public void encode(BitStringBuilder builder) { - try { - OptimizedFibonacciRangeEncoder.encode(builder, this.value); - } catch (Exception e) { - throw new EncodingException(e); - } - } - - public void decode(BitString bitString) { - try { - this.value = OptimizedFibonacciRangeEncoder.decode(bitString); - } catch (Exception e) { - throw new DecodingException(e); - } - } - - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int max = FixedIntegerEncoder.decode(bitString, fromIndex, 16); - if (bitString.getValue(fromIndex + 16)) { - BitStringBuilder out = new BitStringBuilder(); - out.append(bitString.substring(fromIndex, fromIndex + 17)); - out.append(new EncodableFibonacciIntegerRange().substring(bitString, fromIndex + 17)); - return out.build(); - } else { - return bitString.substring(fromIndex, fromIndex + 17 + max); - } - } catch (Exception e) { - throw new SubstringException(e); - } - } - - @SuppressWarnings("unchecked") - @Override - public void setValue(Object value) { - this.value.clear(); - this.value.addAll((Collection) value); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index aa716c37..ee918f97 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; @@ -25,30 +26,14 @@ public void encode(BitStringBuilder builder) { } } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { try { - this.value = OptimizedFixedRangeEncoder.decode(bitString); + this.value = OptimizedFixedRangeEncoder.decode(reader); } catch (Exception e) { throw new DecodingException(e); } } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - try { - int max = FixedIntegerEncoder.decode(bitString, fromIndex, 16); - if (bitString.getValue(fromIndex + 16)) { - BitStringBuilder out = new BitStringBuilder(); - out.append(bitString.substring(fromIndex, fromIndex + 17)); - out.append(new EncodableFixedIntegerRange().substring(bitString, fromIndex + 17)); - return out.build(); - } else { - return bitString.substring(fromIndex, fromIndex + 17 + max); - } - } catch (Exception e) { - throw new SubstringException(e); - } - } - @SuppressWarnings("unchecked") @Override public void setValue(Object value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/SubstringException.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/SubstringException.java deleted file mode 100644 index e9df8ca6..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/SubstringException.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -public class SubstringException extends Exception { - - private static final long serialVersionUID = 1825100490468259890L; - - public SubstringException(String msg) { - super(msg); - } - - public SubstringException(Exception e) { - super(e); - } - - public SubstringException(String msg, Exception e) { - super(msg, e); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 3284a23b..9e7380c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; public final class UnencodableBoolean extends AbstractEncodableBitStringDataType { @@ -18,11 +19,8 @@ public void encode(BitStringBuilder builder){ // pass } - public void decode(BitString bitString) { + public void decode(BitStringReader reader) { // pass } - public BitString substring(BitString bitString, int fromIndex) throws SubstringException { - return BitString.empty(0); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index ebc2462d..ad3f2560 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoder { @@ -18,11 +19,7 @@ public static void encode(BitStringBuilder builder, Instant value) { } } - public static Instant decode(BitString bitString) throws DecodingException { - if (bitString.length() != 36) { - throw new DecodingException("Undecodable Datetime '" + bitString + "'"); - } - - return Instant.ofEpochMilli(FixedLongEncoder.decode(bitString) * 100L); + public static Instant decode(BitStringReader reader) throws DecodingException { + return Instant.ofEpochMilli(reader.readLong(36) * 100L); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index d0f7948a..5af3f7ac 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -50,13 +51,9 @@ public static void encode(BitStringBuilder builder, int value) { FixedIntegerEncoder.encode(builder, out, largestIndex + 1); } - public static int decode(BitString bitString) throws DecodingException { - return decode(bitString, 0, bitString.length()); - } - - public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { + public static int decode(BitString bitString, int start, int end) throws DecodingException { + int length = end - start; int limit = length - 1; - int end = fromIndex + length; // must not overflow and must end with "11" if (length < 2 || limit > FIBONACCI_LIMIT || !bitString.getValue(end - 2) || !bitString.getValue(end - 1)) { throw new DecodingException("Undecodable FibonacciInteger '" + bitString + "'"); @@ -64,7 +61,7 @@ public static int decode(BitString bitString, int fromIndex, int length) throws int value = 0; for (int i = 0; i < limit; i++) { - if (bitString.getValue(fromIndex + i)) { + if (bitString.getValue(start + i)) { value += FIBONACCI_NUMBERS[i]; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index 95dbf869..bb8687c6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoder { @@ -47,38 +48,22 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitString bitString) throws DecodingException { - if (bitString.length() < 12) { - throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); - } - - int count = FixedIntegerEncoder.decode(bitString, 0, 12); + public static IntegerSet decode(BitStringReader reader) throws DecodingException { + int count = reader.readInt(12); IntegerSet value = new IntegerSet(); - int offset = 0; - int startIndex = 12; for (int i = 0; i < count; i++) { - boolean group = BooleanEncoder.decode(bitString, startIndex, 1); - startIndex++; - + boolean group = reader.readBool(); if (group) { - int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); - int start = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; + int start = reader.readFibonacci() + offset; offset = start; - startIndex = index + 2; - - index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); - int end = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; + int end = reader.readFibonacci() + offset; offset = end; - startIndex = index + 2; - value.addRange(start, end + 1); } else { - int index = FibonacciIntegerEncoder.indexOfEndTag(bitString, startIndex); - int val = FibonacciIntegerEncoder.decode(bitString, startIndex, index + 2 - startIndex) + offset; + int val = reader.readFibonacci() + offset; offset = val; value.addInt(val); - startIndex = index + 2; } } return value; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 5a59decd..4ec13831 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; public class FixedBitfieldEncoder { private FixedBitfieldEncoder() {} @@ -11,8 +12,4 @@ public static void encode(BitStringBuilder builder, IntegerSet value, int bitStr BooleanEncoder.encode(builder, value.containsInt(i)); } } - - public static IntegerSet decode(BitString bitString) { - return bitString.toIntegerSet(); - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java index 6b7105ed..f130e6e3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoder.java @@ -24,12 +24,12 @@ public static int decode(BitString bitString) throws DecodingException { return decode(bitString, 0, bitString.length()); } - public static int decode(BitString bitString, int fromIndex, int length) throws DecodingException { + public static int decode(BitString bitString, int from, int to) throws DecodingException { int value = 0; - int base = fromIndex + length - 1; + int length = to - from; for (int i = 0; i < length; i++) { - if (bitString.getValue(base - i)) { + if (bitString.getValue(to - (i + 1))) { value += 1 << i; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index e4ed367f..5f02b638 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -28,33 +29,11 @@ public static void encode(BitStringBuilder builder, List value, int ele } } - public static FixedIntegerList decode(BitString bitString, int elementBitStringLength, int numElements) { - FixedIntegerList out = new FixedIntegerList(numElements); - decode(out, bitString, elementBitStringLength, numElements); - return out; - } - - public static void decode(FixedIntegerList out, BitString bitString, int elementBitStringLength, int numElements) + public static void decode(FixedIntegerList out, BitStringReader reader, int elementBitStringLength) throws DecodingException { - int length = bitString.length(); - if (length > elementBitStringLength * numElements) { - throw new DecodingException("Undecodable FixedIntegerList '" + bitString + "'"); - } - - if (length % elementBitStringLength != 0) { - throw new DecodingException("Undecodable FixedIntegerList '" + bitString + "'"); - } - - bitString = bitString.expandTo(elementBitStringLength * numElements); - - length = bitString.length(); - int idx = 0; - for (int i = 0; i < length; i += elementBitStringLength) { - out.set(idx++, IntegerCache.valueOf(FixedIntegerEncoder.decode(bitString, i, elementBitStringLength))); - } - - while (idx < numElements) { - out.set(idx++, 0); + int size = out.size(); + for (int i = 0; i < size; i++) { + out.setInt(i, reader.readInt(elementBitStringLength)); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index a399ba49..761d4dbc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -3,6 +3,7 @@ import java.util.Collection; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoder { @@ -43,30 +44,17 @@ private static void writeGroup(BitStringBuilder builder, int groupStart, int las } } - public static IntegerSet decode(BitString bitString) throws DecodingException { - if (bitString.length() < 12) { - throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); - } - - int count = FixedIntegerEncoder.decode(bitString, 0, 12); + public static IntegerSet decode(BitStringReader reader) throws DecodingException { + int count = reader.readInt(12); IntegerSet value = new IntegerSet(); - int startIndex = 12; for (int i = 0; i < count; i++) { - boolean group = BooleanEncoder.decode(bitString, startIndex, 1); - startIndex++; - + boolean group = reader.readBool(); if (group) { - int start = FixedIntegerEncoder.decode(bitString, startIndex, 16); - startIndex += 16; - - int end = FixedIntegerEncoder.decode(bitString, startIndex, 16); - startIndex += 16; - + int start = reader.readInt(16); + int end = reader.readInt(16); value.addRange(start, end + 1); } else { - int val = FixedIntegerEncoder.decode(bitString, startIndex, 16); - value.addInt(val); - startIndex += 16; + value.addInt(reader.readInt(16)); } } return value; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java index 9f0dba27..9f0c6ef5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoder.java @@ -20,12 +20,12 @@ public static void encode(BitStringBuilder builder, long value, int bitStringLen } } - public static long decode(BitString bitString) throws DecodingException { + public static long decode(BitString bitString, int from, int to) throws DecodingException { long value = 0; - int length = bitString.length(); + int length = to - from; for (int i = 0; i < length; i++) { - if (bitString.getValue(length - (i + 1))) { + if (bitString.getValue(to - (i + 1))) { value += 1L << i; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index 8c7784d0..a972acb0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -26,16 +27,10 @@ public static void encode(BitStringBuilder builder, String value, int stringLeng } } - public static String decode(BitString bitString) { - int length = bitString.length(); - if (length % 6 != 0) { - throw new DecodingException("Undecodable FixedString '" + bitString + "'"); - } - + public static String decode(BitStringReader reader, int length) { StringBuilder value = new StringBuilder(length); - for (int i = 0; i < length; i += 6) { - int code = FixedIntegerEncoder.decode(bitString, i, 6); + int code = reader.readInt(6); if (code == 63) { value.append(SPACE); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java deleted file mode 100644 index a0b8494e..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFibonacciRangeEncoder.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.iab.gpp.encoder.datatype.encoder; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; - -public class OptimizedFibonacciRangeEncoder { - private OptimizedFibonacciRangeEncoder() {} - - public static void encode(BitStringBuilder builder, IntegerSet value) throws EncodingException { - // TODO: encoding the range before choosing the shortest is inefficient. There is probably a way - // to identify in advance which will be shorter based on the array length and values - BitStringBuilder rangeBitString = new BitStringBuilder(); - int max = FibonacciIntegerRangeEncoder.encode(rangeBitString, value); - int rangeLength = rangeBitString.length(); - int bitFieldLength = max; - - if (rangeLength <= bitFieldLength) { - FixedIntegerEncoder.encode(builder, max, 16); - builder.append(true).append(rangeBitString); - } else { - FixedIntegerEncoder.encode(builder, max, 16); - builder.append(false); - for (int i = 0; i < max; i++) { - builder.append(value.contains(i + 1)); - } - } - } - - public static IntegerSet decode(BitString bitString) throws DecodingException { - if (bitString.length() < 12) { - throw new DecodingException("Undecodable FibonacciIntegerRange '" + bitString + "'"); - } - - if (bitString.getValue(16)) { - return FibonacciIntegerRangeEncoder.decode(bitString.substring(17)); - } else { - BitString bits = bitString.substring(17); - int length = bits.length(); - IntegerSet value = new IntegerSet(); - for (int i = 0; i < length; i++) { - if (bits.getValue(i)) { - value.addInt(i + 1); - } - } - return value; - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 607ace29..82fb1379 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -2,6 +2,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -27,23 +28,12 @@ public static void encode(BitStringBuilder builder, IntegerSet value) throws Enc } } - public static IntegerSet decode(BitString bitString) throws DecodingException { - if (bitString.length() < 12) { - throw new DecodingException("Undecodable FixedIntegerRange '" + bitString + "'"); - } - - if (bitString.getValue(16)) { - return FixedIntegerRangeEncoder.decode(bitString.substring(17)); + public static IntegerSet decode(BitStringReader reader) throws DecodingException { + int size = reader.readInt(16); + if (reader.readBool()) { + return FixedIntegerRangeEncoder.decode(reader); } else { - BitString bits = bitString.substring(17); - int length = bits.length(); - IntegerSet value = new IntegerSet(); - for (int i = 0; i < length; i++) { - if (bits.getValue(i)) { - value.addInt(i + 1); - } - } - return value; + return reader.readIntegerSet(size); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 3212b317..eec00753 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -81,15 +81,15 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField // Necessary to maintain backwards compatibility when sensitive data processing changed from a // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the // DE, IA, NE, NH, NJ, TN release - if (bitString.length() == 66) { - BitStringBuilder builder = new BitStringBuilder(); - builder.append(bitString.substring(0, 48)); - builder.append(BitString.of("00000000")); - builder.append(bitString.substring(48, 52)); - builder.append(BitString.of("00")); - builder.append(bitString.substring(52, 62)); - bitString = builder.build(); - } +// if (bitString.length() == 66) { +// BitStringBuilder builder = new BitStringBuilder(); +// builder.append(bitString.substring(0, 48)); +// builder.append(BitString.of("00000000")); +// builder.append(bitString.substring(48, 52)); +// builder.append(BitString.of("00")); +// builder.append(bitString.substring(52, 62)); +// bitString = builder.build(); +// } bitStringEncoder.decode(bitString, fields); } catch (Exception e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java deleted file mode 100644 index cdecadc3..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableBooleanTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableBooleanTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000000000000000000000000000000000000", - new EncodableDatetime().substring(BitString.of("10000000000000000000000000000000000001"), 1).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111111111111111111111111111111111111", - new EncodableDatetime().substring(BitString.of("01111111111111111111111111111111111110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java deleted file mode 100644 index bd9460b8..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableDatetimeTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; - -public class EncodableDatetimeTest { - - @Test - public void testSubstring1() throws DecodingException, SubstringException { - Assertions.assertEquals("000000000000000000000000000000000000", - new EncodableDatetime().substring(BitString.of("10000000000000000000000000000000000001"), 1).toString()); - } - - @Test - public void testSubstring2() throws DecodingException, SubstringException { - Assertions.assertEquals("111111111111111111111111111111111111", - new EncodableDatetime().substring(BitString.of("01111111111111111111111111111111111110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java deleted file mode 100644 index 76e5919b..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRangeTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.error.DecodingException; - -public class EncodableFibonacciIntegerRangeTest { - - @Test - public void testSubstring1() throws DecodingException, SubstringException { - Assertions.assertEquals("0000000000100001110110011", - new EncodableFibonacciIntegerRange().substring(BitString.of("100000000001000011101100110"), 1).toString()); - } -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java deleted file mode 100644 index 17d98cfe..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfieldTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableFixedBitfieldTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000", new EncodableFixedBitfield(3).substring(BitString.of("10001"), 1).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111", new EncodableFixedBitfield(3).substring(BitString.of("01110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java deleted file mode 100644 index 3cf83666..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerListTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableFixedIntegerListTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("1000", new EncodableFixedIntegerList(2, 2).substring(BitString.of("10001"), 0).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("1110", new EncodableFixedIntegerList(2, 2).substring(BitString.of("01110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java index dc3e6cfc..638d19da 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRangeTest.java @@ -7,25 +7,12 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class EncodableFixedIntegerRangeTest { - @Test - public void testSubstring1() throws DecodingException, SubstringException { - Assertions.assertEquals("00000000001000000000000000011100000000000001010000000000001000", - new EncodableFixedIntegerRange().substring(BitString.of("1000000000010000000000000000111000000000000010100000000000010001"), - 1).toString()); - } - - @Test - public void testSubstring2() throws DecodingException, SubstringException { - Assertions.assertEquals("00000000000100000000000011101", new EncodableFixedIntegerRange().substring( - BitString.of("000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110110000000000010000000000001110100000000000000000000000000000"), - 230).toString()); - } - @Test public void testEncode1() throws EncodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); @@ -47,14 +34,14 @@ public void testEncode2() throws EncodingException { @Test public void testDecode1() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011100")); + encodableFixedIntegerRange.decode(new BitStringReader(BitString.of("00000000000100000000000011100"))); Assertions.assertEquals(Set.of(28), encodableFixedIntegerRange.getValue()); } @Test public void testDecode2() throws DecodingException { EncodableFixedIntegerRange encodableFixedIntegerRange = new EncodableFixedIntegerRange(); - encodableFixedIntegerRange.decode(BitString.of("00000000000100000000000011101")); + encodableFixedIntegerRange.decode(new BitStringReader(BitString.of("00000000000100000000000011101"))); Assertions.assertEquals(Set.of(29), encodableFixedIntegerRange.getValue()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java deleted file mode 100644 index 54a2c9cb..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableFixedIntegerTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000", new EncodableFixedInteger(3).substring(BitString.of("10001"), 1).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111", new EncodableFixedInteger(3).substring(BitString.of("01110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java deleted file mode 100644 index 77beabe3..00000000 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableFixedStringTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.iab.gpp.encoder.datatype; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import com.iab.gpp.encoder.bitstring.BitString; - -public class EncodableFixedStringTest { - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000000000000", new EncodableFixedString(2).substring(BitString.of("10000000000001"), 1).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("111111111111", new EncodableFixedString(2).substring(BitString.of("01111111111110"), 1).toString()); - } - -} diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java index 5cfc68b5..d73c6e91 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRangeTest.java @@ -7,6 +7,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; public class EncodableOptimizedFixedRangeTest { @@ -47,39 +48,25 @@ public void testEncode4() { @Test public void testDecode1() { - encodableOptimizedFixedRange.decode(BitString.of("00000000001100000000000000001000000000001000000000000000000000001")); + encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("00000000001100000000000000001000000000001000000000000000000000001"))); Assertions.assertEquals(Set.of(12, 24, 48), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode2() { - encodableOptimizedFixedRange.decode(BitString.of("00000000000111100000000000000000001000000000001")); + encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("00000000000111100000000000000000001000000000001"))); Assertions.assertEquals(Set.of(18, 30), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode3() { - encodableOptimizedFixedRange.decode(BitString.of("000000000001110000000000000000000000000000001")); + encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("000000000001110000000000000000000000000000001"))); Assertions.assertEquals(Set.of(28), encodableOptimizedFixedRange.getValue()); } @Test public void testDecode4() { - encodableOptimizedFixedRange.decode(BitString.of("0000000000011101100000000000100000000000011101")); + encodableOptimizedFixedRange.decode(new BitStringReader(BitString.of("0000000000011101100000000000100000000000011101"))); Assertions.assertEquals(Set.of(29), encodableOptimizedFixedRange.getValue()); } - - @Test - public void testSubstring1() throws SubstringException { - Assertions.assertEquals("000000000001110000000000000000000000000000001", encodableOptimizedFixedRange.substring( - BitString.of("000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000000000000000000000000000001000000000000000000000000000000"), - 213).toString()); - } - - @Test - public void testSubstring2() throws SubstringException { - Assertions.assertEquals("0000000000011101100000000000100000000000011101", encodableOptimizedFixedRange.substring( - BitString.of("000010001111010010000110111111111100000000001111010010000110111111111100000000000000000000000000000000000000000100001101000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110110000000000010000000000001110100000000000000000000000000000"), - 213).toString()); - } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java index ac18fbd3..73f74cb9 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoderTest.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class DatetimeEncoderTest { @@ -16,7 +17,7 @@ public void test1() throws DecodingException { BitStringBuilder builder = new BitStringBuilder(); DatetimeEncoder.encode(builder, date1); String encodedDate1 = builder.build().toString(); - Instant date2 = DatetimeEncoder.decode(BitString.of(encodedDate1)); + Instant date2 = DatetimeEncoder.decode(new BitStringReader(BitString.of(encodedDate1))); Assertions.assertEquals((date1.toEpochMilli() / 100L) * 100L, date2.toEpochMilli()); } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 2f2c8520..9ff4c7db 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -66,45 +67,49 @@ public void testEncodeTooLarge() { FibonacciIntegerEncoder.encode(builder, Integer.MAX_VALUE)); } + private int decode(String str) { + return new BitStringReader(BitString.of(str)).readFibonacci(); + } + @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(1, FibonacciIntegerEncoder.decode(BitString.of("11"))); + Assertions.assertEquals(1, decode("11")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(2, FibonacciIntegerEncoder.decode(BitString.of("011"))); + Assertions.assertEquals(2, decode("011")); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(3, FibonacciIntegerEncoder.decode(BitString.of("0011"))); + Assertions.assertEquals(3, decode("0011")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(4, FibonacciIntegerEncoder.decode(BitString.of("1011"))); + Assertions.assertEquals(4, decode("1011")); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(5, FibonacciIntegerEncoder.decode(BitString.of("00011"))); + Assertions.assertEquals(5, decode("00011")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(6, FibonacciIntegerEncoder.decode(BitString.of("10011"))); + Assertions.assertEquals(6, decode("10011")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(7, FibonacciIntegerEncoder.decode(BitString.of("01011"))); + Assertions.assertEquals(7, decode("01011")); } @Test public void testDecode8() { try { - FibonacciIntegerEncoder.decode(BitString.of("110")); + decode("110"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -114,7 +119,7 @@ public void testDecode8() { @Test public void testDecode9() { try { - FibonacciIntegerEncoder.decode(BitString.of("1100")); + decode("1100"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -124,7 +129,7 @@ public void testDecode9() { @Test public void testDecode10() { try { - FibonacciIntegerEncoder.decode(BitString.of("0110000000")); + decode("0110000000"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -134,7 +139,7 @@ public void testDecode10() { @Test public void testDecodeTooLarge() { Assertions.assertThrows(DecodingException.class, () -> - FibonacciIntegerEncoder.decode(BitString.of("0001010001000101001000001001000100001000100011"))); + decode("0001010001000101001000001001000100001000100011")); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java index 0579095b..2c71713c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoderTest.java @@ -8,6 +8,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FibonacciIntegerRangeEncoderTest { @@ -62,43 +63,47 @@ public void testEncode7() { FibonacciIntegerRangeEncoder.encode(builder, Arrays.asList(2, 5, 6, 7, 8, 9, 10, 11, 12)); Assertions.assertEquals("00000000001000111001101011", builder.build().toString()); } + + private IntegerSet decode(String str) { + return FibonacciIntegerRangeEncoder.decode(new BitStringReader(BitString.of(str))); + } @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(Set.of(), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000000"))); + Assertions.assertEquals(Set.of(), decode("000000000000")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(Set.of(2), FibonacciIntegerRangeEncoder.decode(BitString.of("0000000000010011"))); + Assertions.assertEquals(Set.of(2), decode("0000000000010011")); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), FibonacciIntegerRangeEncoder.decode(BitString.of("00000000000110111011"))); + Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), decode("00000000000110111011")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(Set.of(2, 5, 6, 7), FibonacciIntegerRangeEncoder.decode(BitString.of("000000000010001110011011"))); + Assertions.assertEquals(Set.of(2, 5, 6, 7), decode("000000000010001110011011")); } @Test public void testDecode5() throws DecodingException { Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), - FibonacciIntegerRangeEncoder.decode(BitString.of("0000000000100001110110011"))); + decode("0000000000100001110110011")); } @Test public void testDecode6() throws DecodingException { Assertions.assertEquals(Set.of(2, 5, 6, 7, 8, 9, 10, 11, 12), - FibonacciIntegerRangeEncoder.decode(BitString.of("00000000001000111001101011"))); + decode("00000000001000111001101011")); } @Test public void testDecode7() { try { - FibonacciIntegerRangeEncoder.decode(BitString.of("0011")); + decode("0011"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -108,7 +113,7 @@ public void testDecode7() { @Test public void testDecode8() { try { - FibonacciIntegerRangeEncoder.decode(BitString.of("000000000002")); + decode("000000000002"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java index 1a18454f..23fdf263 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoderTest.java @@ -6,6 +6,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedBitfieldEncoderTest { @@ -87,45 +88,49 @@ public void testEncode9() { Assertions.assertEquals(Set.of(0,1,2,3,4), set); } + private IntegerSet decode(String str) { + return new BitStringReader(BitString.of(str)).readIntegerSet(str.length()); + } + @Test public void testDecode1() { - Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of(""))); + Assertions.assertEquals(Set.of(), decode("")); } @Test public void testDecode2() { - Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of("0"))); + Assertions.assertEquals(Set.of(), decode("0")); } @Test public void testDecode3() { - Assertions.assertEquals(Set.of(1), FixedBitfieldEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(Set.of(1), decode("1")); } @Test public void testDecode4() { - Assertions.assertEquals(Set.of(), FixedBitfieldEncoder.decode(BitString.of("00"))); + Assertions.assertEquals(Set.of(), decode("00")); } @Test public void testDecode5() { - Assertions.assertEquals(Set.of(2), FixedBitfieldEncoder.decode(BitString.of("01"))); + Assertions.assertEquals(Set.of(2), decode("01")); } @Test public void testDecode6() { - Assertions.assertEquals(Set.of(1), FixedBitfieldEncoder.decode(BitString.of("10"))); + Assertions.assertEquals(Set.of(1), decode("10")); } @Test public void testDecode7() { - Assertions.assertEquals(Set.of(1, 2), FixedBitfieldEncoder.decode(BitString.of("11"))); + Assertions.assertEquals(Set.of(1, 2), decode("11")); } @Test public void testDecode8() { try { - FixedBitfieldEncoder.decode(BitString.of("2")); + decode("2"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java index 676c46e6..c4d75447 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerEncoderTest.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -56,38 +57,42 @@ public void testEncode6() { } } + private int decode(String str) { + return new BitStringReader(BitString.of(str)).readInt(str.length()); + } + @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, FixedIntegerEncoder.decode(BitString.of(""))); + Assertions.assertEquals(0, decode("")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(0, FixedIntegerEncoder.decode(BitString.of("0"))); + Assertions.assertEquals(0, decode("0")); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(0, FixedIntegerEncoder.decode(BitString.of("000000"))); + Assertions.assertEquals(0, decode("000000")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(1, FixedIntegerEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(1, decode("1")); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(1, FixedIntegerEncoder.decode(BitString.of("000001"))); + Assertions.assertEquals(1, decode("000001")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(8, FixedIntegerEncoder.decode(BitString.of("1000"))); + Assertions.assertEquals(8, decode("1000")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(8, FixedIntegerEncoder.decode(BitString.of("0000001000"))); + Assertions.assertEquals(8, decode("0000001000")); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 16a70ff4..365ea4de 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -7,6 +7,8 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; +import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -149,95 +151,101 @@ public void testEncode19() { } } + private FixedIntegerList decode(String str) { + FixedIntegerList out = new FixedIntegerList(2); + FixedIntegerListEncoder.decode(out, new BitStringReader(BitString.of(str)), 2); + return out; + } + @Test public void testDecode1() { - Assertions.assertEquals(Arrays.asList(0, 0), FixedIntegerListEncoder.decode(BitString.of(""), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 0), decode("")); } @Test public void testDecode2() { - Assertions.assertEquals(Arrays.asList(0, 0), FixedIntegerListEncoder.decode(BitString.of("0000"), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 0), decode("0000")); } @Test public void testDecode3() { - Assertions.assertEquals(Arrays.asList(0, 1), FixedIntegerListEncoder.decode(BitString.of("0001"), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 1), decode("0001")); } @Test public void testDecode4() { - Assertions.assertEquals(Arrays.asList(0, 2), FixedIntegerListEncoder.decode(BitString.of("0010"), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 2), decode("0010")); } @Test public void testDecode5() { - Assertions.assertEquals(Arrays.asList(0, 3), FixedIntegerListEncoder.decode(BitString.of("0011"), 2, 2)); + Assertions.assertEquals(Arrays.asList(0, 3), decode("0011")); } @Test public void testDecode6() { - Assertions.assertEquals(Arrays.asList(1, 0), FixedIntegerListEncoder.decode(BitString.of("0100"), 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 0), decode("0100")); } @Test public void testDecode7() { - Assertions.assertEquals(Arrays.asList(1, 1), FixedIntegerListEncoder.decode(BitString.of("0101"), 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 1), decode("0101")); } @Test public void testDecode8() { - Assertions.assertEquals(Arrays.asList(1, 2), FixedIntegerListEncoder.decode(BitString.of("0110"), 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 2), decode("0110")); } @Test public void testDecode9() { - Assertions.assertEquals(Arrays.asList(1, 3), FixedIntegerListEncoder.decode(BitString.of("0111"), 2, 2)); + Assertions.assertEquals(Arrays.asList(1, 3), decode("0111")); } @Test public void testDecode10() { - Assertions.assertEquals(Arrays.asList(2, 0), FixedIntegerListEncoder.decode(BitString.of("1000"), 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 0), decode("1000")); } @Test public void testDecode11() { - Assertions.assertEquals(Arrays.asList(2, 1), FixedIntegerListEncoder.decode(BitString.of("1001"), 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 1), decode("1001")); } @Test public void testDecode12() { - Assertions.assertEquals(Arrays.asList(2, 2), FixedIntegerListEncoder.decode(BitString.of("1010"), 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 2), decode("1010")); } @Test public void testDecode13() { - Assertions.assertEquals(Arrays.asList(2, 3), FixedIntegerListEncoder.decode(BitString.of("1011"), 2, 2)); + Assertions.assertEquals(Arrays.asList(2, 3), decode("1011")); } @Test public void testDecode14() { - Assertions.assertEquals(Arrays.asList(3, 0), FixedIntegerListEncoder.decode(BitString.of("1100"), 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 0), decode("1100")); } @Test public void testDecode15() { - Assertions.assertEquals(Arrays.asList(3, 1), FixedIntegerListEncoder.decode(BitString.of("1101"), 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 1), decode("1101")); } @Test public void testDecode16() { - Assertions.assertEquals(Arrays.asList(3, 2), FixedIntegerListEncoder.decode(BitString.of("1110"), 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 2), decode("1110")); } @Test public void testDecode17() { - Assertions.assertEquals(Arrays.asList(3, 3), FixedIntegerListEncoder.decode(BitString.of("1111"), 2, 2)); + Assertions.assertEquals(Arrays.asList(3, 3), decode("1111")); } @Test public void testDecode18() { try { - FixedIntegerListEncoder.decode(BitString.of("111111"), 2, 2); + decode("111111"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -247,7 +255,7 @@ public void testDecode18() { @Test public void testDecode19() { try { - FixedIntegerListEncoder.decode(BitString.of("2"), 2, 2); + decode("2"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -257,7 +265,7 @@ public void testDecode19() { @Test public void testDecode20() { try { - FixedIntegerListEncoder.decode(BitString.of("111"), 2, 2); + decode("111"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java index 7f187b7a..da47b3a5 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoderTest.java @@ -8,6 +8,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; public class FixedIntegerRangeEncoderTest { @@ -85,56 +86,59 @@ public void testEncode9() { builder.build().toString()); } + private IntegerSet decode(String str) { + return FixedIntegerRangeEncoder.decode(new BitStringReader(BitString.of(str))); + } + @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(Set.of(), FixedIntegerRangeEncoder.decode(BitString.of("000000000000"))); + Assertions.assertEquals(Set.of(), decode("000000000000")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(Set.of(2), FixedIntegerRangeEncoder.decode(BitString.of("00000000000100000000000000010"))); + Assertions.assertEquals(Set.of(2), decode("00000000000100000000000000010")); } @Test public void testDecode3() throws DecodingException { Assertions.assertEquals(Set.of(2, 3, 4, 5, 6), - FixedIntegerRangeEncoder.decode(BitString.of("000000000001100000000000000100000000000000110"))); + decode("000000000001100000000000000100000000000000110")); } @Test public void testDecode4() throws DecodingException { Assertions.assertEquals(Set.of(2, 5, 6, 7), - FixedIntegerRangeEncoder.decode(BitString.of("00000000001000000000000000010100000000000001010000000000000111"))); + decode("00000000001000000000000000010100000000000001010000000000000111")); } @Test public void testDecode5() throws DecodingException { Assertions.assertEquals(Set.of(3, 5, 6, 7, 8), - FixedIntegerRangeEncoder.decode(BitString.of("00000000001000000000000000011100000000000001010000000000001000"))); + decode("00000000001000000000000000011100000000000001010000000000001000")); } @Test public void testDecode6() throws DecodingException { Assertions.assertEquals(Set.of(12, 24, 48), - FixedIntegerRangeEncoder.decode(BitString.of("000000000011000000000000011000000000000001100000000000000110000"))); + decode("000000000011000000000000011000000000000001100000000000000110000")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(Set.of(12, 24, 48, 49), FixedIntegerRangeEncoder - .decode(BitString.of("0000000000110000000000000110000000000000011000100000000001100000000000000110001"))); + Assertions.assertEquals(Set.of(12, 24, 48, 49), decode("0000000000110000000000000110000000000000011000100000000001100000000000000110001")); } @Test public void testDecode8() throws DecodingException { - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), FixedIntegerRangeEncoder.decode( - BitString.of("00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010"))); + Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 24, 25, 37, 42), decode( + "00000000100000000000000000010000000000000001100000000000000100000000000000001100000000000000100101000000000001011100000000000110010000000000010010100000000000101010")); } @Test public void testDecode9() { try { - FixedIntegerRangeEncoder.decode(BitString.of("0011")); + decode("0011"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { @@ -144,7 +148,7 @@ public void testDecode9() { @Test public void testDecode10() { try { - FixedIntegerRangeEncoder.decode(BitString.of("000000000002")); + decode("000000000002"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java index 653e5066..fc1fde0a 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedLongEncoderTest.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -64,43 +65,47 @@ public void testEncode7() { } } + private long decode(String str) { + return new BitStringReader(BitString.of(str)).readLong(str.length()); + } + @Test public void testDecode1() throws DecodingException { - Assertions.assertEquals(0, FixedLongEncoder.decode(BitString.of(""))); + Assertions.assertEquals(0, decode("")); } @Test public void testDecode2() throws DecodingException { - Assertions.assertEquals(0, FixedLongEncoder.decode(BitString.of("0"))); + Assertions.assertEquals(0, decode("0")); } @Test public void testDecode3() throws DecodingException { - Assertions.assertEquals(0, FixedLongEncoder.decode(BitString.of("000000"))); + Assertions.assertEquals(0, decode("000000")); } @Test public void testDecode4() throws DecodingException { - Assertions.assertEquals(1, FixedLongEncoder.decode(BitString.of("1"))); + Assertions.assertEquals(1, decode("1")); } @Test public void testDecode5() throws DecodingException { - Assertions.assertEquals(1, FixedLongEncoder.decode(BitString.of("000001"))); + Assertions.assertEquals(1, decode("000001")); } @Test public void testDecode6() throws DecodingException { - Assertions.assertEquals(16630898421L, FixedLongEncoder.decode(BitString.of("001111011111010001110101111011110101"))); + Assertions.assertEquals(16630898421L, decode("001111011111010001110101111011110101")); } @Test public void testDecode7() throws DecodingException { - Assertions.assertEquals(8, FixedLongEncoder.decode(BitString.of("1000"))); + Assertions.assertEquals(8, decode("1000")); } @Test public void testDecode8() throws DecodingException { - Assertions.assertEquals(8, FixedLongEncoder.decode(BitString.of("0000001000"))); + Assertions.assertEquals(8, decode("0000001000")); } } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index bc904371..a7604730 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -5,6 +5,7 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; @@ -35,20 +36,24 @@ public void testEncode3() { } } + private String decode(String str) { + return FixedStringEncoder.decode(new BitStringReader(BitString.of(str)), str.length()); + } + @Test public void testDecode1() { - Assertions.assertEquals("AB", FixedStringEncoder.decode(BitString.of("000000000001"))); + Assertions.assertEquals("AB", decode("000000000001")); } @Test public void testDecode2() { - Assertions.assertEquals("a", FixedStringEncoder.decode(BitString.of("100000111111"))); + Assertions.assertEquals("a", decode("100000111111")); } @Test public void testDecode3() { try { - FixedStringEncoder.decode(BitString.of("2")); + decode("2"); Assertions.fail("DecodingException expected"); } catch (DecodingException e) { From 3ab0e441fd407bc5322312fdca14a437b212d1ad Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 15 Jan 2026 18:54:02 -0500 Subject: [PATCH 13/49] fix tests --- .../base64/AbstractBase64UrlEncoder.java | 2 +- .../iab/gpp/encoder/bitstring/BitString.java | 3 ++ .../encoder/FibonacciIntegerEncoder.java | 5 ++-- .../datatype/encoder/FixedStringEncoder.java | 2 +- .../encoder/FibonacciIntegerEncoderTest.java | 30 ------------------- .../encoder/FixedIntegerListEncoderTest.java | 17 +---------- .../encoder/FixedStringEncoderTest.java | 2 +- 7 files changed, 10 insertions(+), 51 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index eacd934d..d0c508c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -35,7 +35,7 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { int index = 0; while (index <= length - BASE64_BITS) { try { - int n = FixedIntegerEncoder.decode(bitString, index, BASE64_BITS); + int n = FixedIntegerEncoder.decode(bitString, index, index + BASE64_BITS); str.append(DICT.charAt(n)); index += BASE64_BITS; } catch (DecodingException e) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index c12d7132..1220c31d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -48,6 +48,9 @@ public String toString() { } public boolean getValue(int i) { + if (i >= length) { + throw new DecodingException("faile"); + } return bitSet.get(i); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index 5af3f7ac..a65d93c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -55,7 +55,8 @@ public static int decode(BitString bitString, int start, int end) throws Decodin int length = end - start; int limit = length - 1; // must not overflow and must end with "11" - if (length < 2 || limit > FIBONACCI_LIMIT || !bitString.getValue(end - 2) || !bitString.getValue(end - 1)) { + if (length < 2 || limit > FIBONACCI_LIMIT || !bitString.getValue(end - 2) + || !bitString.getValue(end - 1)) { throw new DecodingException("Undecodable FibonacciInteger '" + bitString + "'"); } @@ -86,6 +87,6 @@ public static int indexOfEndTag(BitString bitString, int fromIndex) { i++; } } - return -1; + throw new DecodingException("fadf"); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index a972acb0..f721c8a5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -29,7 +29,7 @@ public static void encode(BitStringBuilder builder, String value, int stringLeng public static String decode(BitStringReader reader, int length) { StringBuilder value = new StringBuilder(length); - for (int i = 0; i < length; i += 6) { + for (int i = 0; i < length; i++) { int code = reader.readInt(6); if (code == 63) { value.append(SPACE); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java index 9ff4c7db..060a25c1 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoderTest.java @@ -106,36 +106,6 @@ public void testDecode7() throws DecodingException { Assertions.assertEquals(7, decode("01011")); } - @Test - public void testDecode8() { - try { - decode("110"); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode9() { - try { - decode("1100"); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - - @Test - public void testDecode10() { - try { - decode("0110000000"); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - @Test public void testDecodeTooLarge() { Assertions.assertThrows(DecodingException.class, () -> diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java index 365ea4de..2144dbe5 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoderTest.java @@ -150,17 +150,12 @@ public void testEncode19() { } } - + private FixedIntegerList decode(String str) { FixedIntegerList out = new FixedIntegerList(2); FixedIntegerListEncoder.decode(out, new BitStringReader(BitString.of(str)), 2); return out; } - - @Test - public void testDecode1() { - Assertions.assertEquals(Arrays.asList(0, 0), decode("")); - } @Test public void testDecode2() { @@ -242,16 +237,6 @@ public void testDecode17() { Assertions.assertEquals(Arrays.asList(3, 3), decode("1111")); } - @Test - public void testDecode18() { - try { - decode("111111"); - Assertions.fail("DecodingException expected"); - } catch (DecodingException e) { - - } - } - @Test public void testDecode19() { try { diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java index a7604730..970c99bc 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoderTest.java @@ -37,7 +37,7 @@ public void testEncode3() { } private String decode(String str) { - return FixedStringEncoder.decode(new BitStringReader(BitString.of(str)), str.length()); + return FixedStringEncoder.decode(new BitStringReader(BitString.of(str)), str.length() / 6); } @Test From 35ace8dde837dae87ca88d22330d7e5f8cb24c7a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 15 Jan 2026 19:05:40 -0500 Subject: [PATCH 14/49] fix copy --- .../encoder/bitstring/BitStringBuilder.java | 14 +++++++++++--- .../gpp/encoder/segment/UsNatCoreSegment.java | 19 ++++++++++--------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java index bf780ff4..275a4371 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java @@ -17,6 +17,11 @@ public BitStringBuilder() { public BitString build() { return new BitString(bitSet, length); } + + public BitStringBuilder extend(int length) { + this.length += length; + return this; + } public BitStringBuilder append(boolean value) { int idx = length++; @@ -26,14 +31,17 @@ public BitStringBuilder append(boolean value) { return this; } - public BitStringBuilder append(BitString other) { - int otherLength = other.length(); - for (int i = 0; i < otherLength; i++) { + public BitStringBuilder append(BitString other, int from, int to) { + for (int i = from; i < to; i++) { append(other.getValue(i)); } return this; } + public BitStringBuilder append(BitString other) { + return append(other, 0, other.length()); + } + public int length() { return length; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index eec00753..e5e60e3e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -81,15 +81,16 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField // Necessary to maintain backwards compatibility when sensitive data processing changed from a // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the // DE, IA, NE, NH, NJ, TN release -// if (bitString.length() == 66) { -// BitStringBuilder builder = new BitStringBuilder(); -// builder.append(bitString.substring(0, 48)); -// builder.append(BitString.of("00000000")); -// builder.append(bitString.substring(48, 52)); -// builder.append(BitString.of("00")); -// builder.append(bitString.substring(52, 62)); -// bitString = builder.build(); -// } + if (bitString.length() == 66) { + BitStringBuilder builder = new BitStringBuilder(); + + builder.append(bitString, 0, 48); + builder.extend(8); + builder.append(bitString, 48, 52); + builder.extend(2); + builder.append(bitString, 52, 62); + bitString = builder.build(); + } bitStringEncoder.decode(bitString, fields); } catch (Exception e) { From ed4581a94b70029752e9fabdbb3712ee1cbd47aa Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 16 Jan 2026 12:37:27 -0500 Subject: [PATCH 15/49] own bitset --- .../com/iab/gpp/encoder/bitstring/BitSet.java | 101 ++++++++++++++++++ .../iab/gpp/encoder/bitstring/BitString.java | 1 - .../encoder/datatype/encoder/IntegerSet.java | 8 +- 3 files changed, 105 insertions(+), 5 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java new file mode 100644 index 00000000..78a29bc2 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -0,0 +1,101 @@ +package com.iab.gpp.encoder.bitstring; + +import java.util.Arrays; +import com.iab.gpp.encoder.error.DecodingException; + +// a thin version of java.util.BitSet +public final class BitSet { + + private static final int ADDRESS_BITS_PER_WORD = 6; + private static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; + + /* Used to shift left or right for a partial word mask */ + private static final long WORD_MASK = 0xffffffffffffffffL; + + private long[] words; + + public BitSet(int initialCapacity) { + this.words = new long[wordIndex(initialCapacity) + 1]; + } + + public BitSet() { + this(0); + } + + private static int wordIndex(int index) { + if (index < 0) { + throw new DecodingException("got negative word index"); + } + return index >> ADDRESS_BITS_PER_WORD; + } + + private long[] ensureIndex(int wordIndex) { + long[] words = this.words; + int wordsUsed = words.length; + if (wordIndex >= wordsUsed) { + int request = Math.max(2 * wordsUsed, wordIndex + 1); + words = Arrays.copyOf(words, request); + this.words = words; + } + return words; + } + + public boolean get(int index) { + int wordIndex = wordIndex(index); + long[] words = this.words; + return (wordIndex < words.length) + && ((words[wordIndex] & (1L << index)) != 0); + } + + public void clear(int from, int to) { + for (int i = from; i < to; i++) { + clear(i); + } + } + + public void clear(int bitIndex) { + int wordIndex = wordIndex(bitIndex); + long[] words = this.words; + if (wordIndex < words.length) { + words[wordIndex] &= ~(1L << bitIndex); + } + } + + public int nextSetBit(int fromIndex) { + long[] words = this.words; + int wordsInUse = words.length; + int u = wordIndex(fromIndex); + if (u >= wordsInUse) { + return -1; + } + + long word = words[u] & (WORD_MASK << fromIndex); + + while (true) { + if (word != 0) { + return (u * BITS_PER_WORD) + Long.numberOfTrailingZeros(word); + } + if (++u == wordsInUse) { + return -1; + } + word = words[u]; + } + } + + public void set(int from, int to) { + for (int i = from; i < to; i++) { + set(i); + } + } + + public void set(int bitIndex) { + int wordIndex = wordIndex(bitIndex); + long[] words = ensureIndex(wordIndex); + words[wordIndex] |= (1L << bitIndex); + } + + public void appendLong(int bitIndex, long value, int bits) { + + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 1220c31d..a8962d65 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.bitstring; -import java.util.BitSet; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 340252e8..241cbf00 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.AbstractSet; -import java.util.BitSet; import java.util.Collection; import java.util.NoSuchElementException; import java.util.Spliterator; @@ -10,6 +9,7 @@ import java.util.logging.Logger; import java.util.stream.IntStream; import java.util.stream.StreamSupport; +import com.iab.gpp.encoder.bitstring.BitSet; /** * An optimized implementation of {@literal Set} backed by a {@link java.util.BitSet}. @@ -34,7 +34,7 @@ public IntegerSet(BitSet bitSet, int from, int to, int adjustment) { } public IntegerSet(int limit) { - this(new BitSet(0), 0, limit, 0); + this(new BitSet(), 0, limit, 0); } public IntegerSet() { @@ -146,7 +146,7 @@ public boolean addInt(int value) { if (present) { return false; } - bitSet.set(offset, true); + bitSet.set(offset); dirty = true; return true; } @@ -161,7 +161,7 @@ public boolean removeInt(int value) { if (!present) { return false; } - bitSet.set(offset, false); + bitSet.clear(offset); dirty = true; return true; } From ec6b366167a49d48e934ed14caed3958d8f2e3dc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 16 Jan 2026 15:07:15 -0500 Subject: [PATCH 16/49] wip --- .../base64/AbstractBase64UrlEncoder.java | 28 ++++++++++++------- .../com/iab/gpp/encoder/bitstring/BitSet.java | 16 +++++------ .../iab/gpp/encoder/bitstring/BitString.java | 2 +- .../encoder/bitstring/BitStringBuilder.java | 5 ---- .../TraditionalBase64UrlEncoderTest.java | 21 +------------- 5 files changed, 28 insertions(+), 44 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index d0c508c2..8a0243f3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -1,5 +1,7 @@ package com.iab.gpp.encoder.base64; +import java.util.Arrays; +import com.iab.gpp.encoder.bitstring.BitSet; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; @@ -17,12 +19,11 @@ public abstract class AbstractBase64UrlEncoder { */ private static final String DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; private static final int REVERSE_DICT_SIZE = 128; - private static final BitString[] REVERSE_DICT = new BitString[REVERSE_DICT_SIZE]; + private static final long[] REVERSE_DICT = new long[REVERSE_DICT_SIZE]; static { + Arrays.fill(REVERSE_DICT, -1); for (int i = 0; i < DICT.length(); i++) { - BitStringBuilder builder = new BitStringBuilder(); - FixedIntegerEncoder.encode(builder, i, 6); - REVERSE_DICT[DICT.charAt(i)] = builder.build(); + REVERSE_DICT[DICT.charAt(i)] = Long.reverse(i) >>> -6; } } @@ -48,19 +49,26 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { public BitString decode(CharSequence str) { int length = str.length(); - BitStringBuilder sb = new BitStringBuilder(length * BASE64_BITS); + int bitLength = length * BASE64_BITS; + long [] words = new long[bitLength / BitSet.BITS_PER_WORD + 1]; + int bitIndex = 0; for (int i = 0; i < length; i++) { char c = str.charAt(i); - BitString n = null; + long n = -1; if (c < REVERSE_DICT_SIZE) { n = REVERSE_DICT[c]; } - if (n == null) { + if (n < 0) { throw new DecodingException("Undecodable Base64URL string"); } - sb.append(n); - + int wordIndex = BitSet.wordIndex(bitIndex); + words[wordIndex] |= (n << bitIndex); + int nextWordIndex = BitSet.wordIndex(bitIndex + BASE64_BITS); + if(wordIndex != nextWordIndex) { + words[nextWordIndex] = n >>> (BitSet.BITS_PER_WORD - bitIndex); + } + bitIndex += 6; } - return sb.build(); + return new BitString(new BitSet(words), bitLength); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 78a29bc2..56cdc0fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,28 +1,33 @@ package com.iab.gpp.encoder.bitstring; import java.util.Arrays; +import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.error.DecodingException; // a thin version of java.util.BitSet public final class BitSet { private static final int ADDRESS_BITS_PER_WORD = 6; - private static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; + public static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; /* Used to shift left or right for a partial word mask */ private static final long WORD_MASK = 0xffffffffffffffffL; private long[] words; + public BitSet(long[] words) { + this.words = words; + } + public BitSet(int initialCapacity) { - this.words = new long[wordIndex(initialCapacity) + 1]; + this(new long[wordIndex(initialCapacity) + 1]); } public BitSet() { this(0); } - private static int wordIndex(int index) { + public static int wordIndex(int index) { if (index < 0) { throw new DecodingException("got negative word index"); } @@ -93,9 +98,4 @@ public void set(int bitIndex) { long[] words = ensureIndex(wordIndex); words[wordIndex] |= (1L << bitIndex); } - - public void appendLong(int bitIndex, long value, int bits) { - - } - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index a8962d65..5998d632 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -12,7 +12,7 @@ public final class BitString { private final BitSet bitSet; private final int length; - BitString(BitSet bitSet, int length) { + public BitString(BitSet bitSet, int length) { this.bitSet = bitSet; this.length = length; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java index 275a4371..dc42e85b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringBuilder.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.bitstring; -import java.util.BitSet; public final class BitStringBuilder { private final BitSet bitSet; @@ -38,10 +37,6 @@ public BitStringBuilder append(BitString other, int from, int to) { return this; } - public BitStringBuilder append(BitString other) { - return append(other, 0, other.length()); - } - public int length() { return length; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index 02985a7e..52a02e9c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -9,26 +9,7 @@ public class TraditionalBase64UrlEncoderTest { private TraditionalBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - @Test - public void testEncode1() { - BitStringBuilder builder = new BitStringBuilder(); - builder.append(BitString.of("0000110000010000000000010011")); - Assertions.assertEquals("DBABMAAA", base64UrlEncoder.encode(builder).toString()); - } - - @Test - public void testEncode2() { - BitStringBuilder builder = new BitStringBuilder(); - builder.append(BitString.of("000011000001000000000010001101011")); - Assertions.assertEquals("DBACNYAA", base64UrlEncoder.encode(builder).toString()); - } - - @Test - public void testEncode3() { - BitStringBuilder builder = new BitStringBuilder(); - builder.append(BitString.of("00001100000100000000000110001111")); - Assertions.assertEquals("DBABjwAA", base64UrlEncoder.encode(builder).toString()); - } + @Test public void testDecode1() { From c7cc6b696d81040e0de0dbfd87ef2e1c412870a1 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 16 Jan 2026 15:25:18 -0500 Subject: [PATCH 17/49] remove imports --- .../src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java | 1 - .../encoder/datatype/AbstractEncodableBitStringDataType.java | 1 - .../java/com/iab/gpp/encoder/datatype/EncodableBoolean.java | 1 - .../java/com/iab/gpp/encoder/datatype/EncodableDatetime.java | 1 - .../iab/gpp/encoder/datatype/EncodableFibonacciInteger.java | 1 - .../gpp/encoder/datatype/EncodableFibonacciIntegerRange.java | 3 --- .../com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java | 1 - .../com/iab/gpp/encoder/datatype/EncodableFixedInteger.java | 1 - .../iab/gpp/encoder/datatype/EncodableFixedIntegerList.java | 1 - .../iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java | 2 -- .../com/iab/gpp/encoder/datatype/EncodableFixedString.java | 1 - .../iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java | 1 - .../iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java | 2 -- .../java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java | 1 - .../com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java | 1 - .../gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java | 1 - .../encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java | 1 - .../iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java | 2 -- .../gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java | 1 - .../gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java | 1 - .../iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java | 2 -- .../encoder/datatype/encoder/OptimizedFixedRangeEncoder.java | 1 - 22 files changed, 28 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 56cdc0fa..3c9f4b92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.bitstring; import java.util.Arrays; -import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.error.DecodingException; // a thin version of java.util.BitSet diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 5510871c..76e38bc5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -4,7 +4,6 @@ import java.util.function.Predicate; import java.util.stream.Collectors; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.error.ValidationException; public abstract class AbstractEncodableBitStringDataType implements EncodableDataType { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index df96560b..20a66fb4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.BooleanEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java index bf677028..49e61af4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java @@ -2,7 +2,6 @@ import java.time.Instant; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.DatetimeEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java index 02924acf..850bdff2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciInteger.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java index 6a36ad6b..1251b8b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java @@ -1,12 +1,9 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FibonacciIntegerRangeEncoder; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java index 9d328753..af670eb5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java index 5d9beb20..d4ba3426 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java index 7d95c260..e0913e61 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java @@ -2,7 +2,6 @@ import java.util.List; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerListEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java index c53bf0e0..01411792 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java @@ -1,10 +1,8 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedIntegerRangeEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java index 36b54442..c41794c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedStringEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java index 31a56bed..7b983090 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java @@ -3,7 +3,6 @@ import java.util.Collection; import java.util.function.IntSupplier; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.encoder.FixedBitfieldEncoder; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java index ee918f97..12858d8f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableOptimizedFixedRange.java @@ -1,10 +1,8 @@ package com.iab.gpp.encoder.datatype; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.datatype.encoder.OptimizedFixedRangeEncoder; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java index 9e7380c3..b4947777 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableBoolean.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java index ad3f2560..ed83bb99 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/DatetimeEncoder.java @@ -2,7 +2,6 @@ import java.time.Instant; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index a65d93c9..ef9f0e70 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -2,7 +2,6 @@ import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java index bb8687c6..beef3289 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerRangeEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java index 4ec13831..5b5b0b3d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedBitfieldEncoder.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringReader; public class FixedBitfieldEncoder { private FixedBitfieldEncoder() {} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java index 5f02b638..d21dfc71 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerListEncoder.java @@ -2,7 +2,6 @@ import java.util.List; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.FixedIntegerList; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java index 761d4dbc..0b12b0ea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedIntegerRangeEncoder.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; import java.util.Collection; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java index f721c8a5..2b6f3cee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FixedStringEncoder.java @@ -1,9 +1,7 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FixedStringEncoder { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java index 82fb1379..c264e91a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/OptimizedFixedRangeEncoder.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.error.DecodingException; From 22b1caa8bb5699d73b274a48b537f4874fd84c08 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 09:52:52 -0500 Subject: [PATCH 18/49] style --- .../base64/AbstractBase64UrlEncoder.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 8a0243f3..0ab2a6d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -13,6 +13,7 @@ public abstract class AbstractBase64UrlEncoder { protected abstract void pad(BitStringBuilder bitString); private static final int BASE64_BITS = 6; + private static final long NO_SYMBOL = -1; /** * Base 64 URL character set. Different from standard Base64 char set in that '+' and '/' are * replaced with '-' and '_'. @@ -21,9 +22,12 @@ public abstract class AbstractBase64UrlEncoder { private static final int REVERSE_DICT_SIZE = 128; private static final long[] REVERSE_DICT = new long[REVERSE_DICT_SIZE]; static { - Arrays.fill(REVERSE_DICT, -1); + Arrays.fill(REVERSE_DICT, NO_SYMBOL); for (int i = 0; i < DICT.length(); i++) { - REVERSE_DICT[DICT.charAt(i)] = Long.reverse(i) >>> -6; + // NOTE: the bit string is stored in a long[] and read from LSB to MSB + // but each base64 digit is read from MSB to LSB + // so they need to be reversed. + REVERSE_DICT[DICT.charAt(i)] = Long.reverse(i) >>> -BASE64_BITS; } } @@ -54,20 +58,21 @@ public BitString decode(CharSequence str) { int bitIndex = 0; for (int i = 0; i < length; i++) { char c = str.charAt(i); - long n = -1; + long n = NO_SYMBOL; if (c < REVERSE_DICT_SIZE) { n = REVERSE_DICT[c]; } - if (n < 0) { + if (n == NO_SYMBOL) { throw new DecodingException("Undecodable Base64URL string"); } int wordIndex = BitSet.wordIndex(bitIndex); words[wordIndex] |= (n << bitIndex); - int nextWordIndex = BitSet.wordIndex(bitIndex + BASE64_BITS); + int nextBitIndex = bitIndex + BASE64_BITS; + int nextWordIndex = BitSet.wordIndex(nextBitIndex); if(wordIndex != nextWordIndex) { words[nextWordIndex] = n >>> (BitSet.BITS_PER_WORD - bitIndex); } - bitIndex += 6; + bitIndex = nextBitIndex; } return new BitString(new BitSet(words), bitLength); } From e966b1efc984923e2f4acc969805ab437f1b189c Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 20:56:59 -0500 Subject: [PATCH 19/49] optimize fibonacci --- .../iab/gpp/encoder/bitstring/BitString.java | 2 +- .../encoder/bitstring/BitStringReader.java | 21 +++++++-- .../encoder/FibonacciIntegerEncoder.java | 45 +------------------ 3 files changed, 20 insertions(+), 48 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java index 5998d632..f5cbe555 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitString.java @@ -48,7 +48,7 @@ public String toString() { public boolean getValue(int i) { if (i >= length) { - throw new DecodingException("faile"); + throw new DecodingException("Bit string access out of range"); } return bitSet.get(i); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java index 1869e76a..634941ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringReader.java @@ -4,6 +4,7 @@ import com.iab.gpp.encoder.datatype.encoder.FixedIntegerEncoder; import com.iab.gpp.encoder.datatype.encoder.FixedLongEncoder; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import com.iab.gpp.encoder.error.DecodingException; public final class BitStringReader { @@ -33,10 +34,22 @@ public boolean readBool() { } public int readFibonacci() { - int indexOfEndTag = FibonacciIntegerEncoder.indexOfEndTag(bitString, offset) + 2; - int out = FibonacciIntegerEncoder.decode(bitString, offset, indexOfEndTag); - offset = indexOfEndTag; - return out; + int value = 0; + int offset = this.offset; + for (int i = 0; i < FibonacciIntegerEncoder.FIBONACCI_LIMIT; i++) { + if (bitString.getValue(offset + i)) { + // 1X + value += FibonacciIntegerEncoder.FIBONACCI_NUMBERS[i]; + i++; + int next = offset + i; + if (bitString.getValue(next)) { + // 11 + this.offset = next + 1; + return value; + } + } + } + throw new DecodingException("Invalid FibonacciInteger"); } public IntegerSet readIntegerSet(int length) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java index ef9f0e70..869d287d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/FibonacciIntegerEncoder.java @@ -1,8 +1,6 @@ package com.iab.gpp.encoder.datatype.encoder; -import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; public class FibonacciIntegerEncoder { @@ -10,8 +8,8 @@ private FibonacciIntegerEncoder() {} // this is the length of the longest fibonacci encoded string of all 1's // which does not overflow a 32-bit integer - private static final int FIBONACCI_LIMIT = 42; - private static final int[] FIBONACCI_NUMBERS = new int[FIBONACCI_LIMIT]; + public static final int FIBONACCI_LIMIT = 42; + public static final int[] FIBONACCI_NUMBERS = new int[FIBONACCI_LIMIT]; static { for (int i = 0; i < FIBONACCI_LIMIT; i++) { if (i == 0) { @@ -49,43 +47,4 @@ public static void encode(BitStringBuilder builder, int value) { } FixedIntegerEncoder.encode(builder, out, largestIndex + 1); } - - public static int decode(BitString bitString, int start, int end) throws DecodingException { - int length = end - start; - int limit = length - 1; - // must not overflow and must end with "11" - if (length < 2 || limit > FIBONACCI_LIMIT || !bitString.getValue(end - 2) - || !bitString.getValue(end - 1)) { - throw new DecodingException("Undecodable FibonacciInteger '" + bitString + "'"); - } - - int value = 0; - for (int i = 0; i < limit; i++) { - if (bitString.getValue(start + i)) { - value += FIBONACCI_NUMBERS[i]; - } - } - return value; - } - - public static int indexOfEndTag(BitString bitString, int fromIndex) { - int limit = bitString.length() - 1; - int i = fromIndex; - while (i < limit) { - if (bitString.getValue(i)) { - // 1X - if (bitString.getValue(i + 1)) { - // 11 - return i; - } else { - // 10, the next can be skipped - i += 2; - } - } else { - // 0, next - i++; - } - } - throw new DecodingException("fadf"); - } } From 36452372e3a701c146be2c12e57c467f32a3a798 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 21:17:39 -0500 Subject: [PATCH 20/49] optimize encode --- .../com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 0ab2a6d8..7b34c036 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -40,9 +40,10 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { int index = 0; while (index <= length - BASE64_BITS) { try { - int n = FixedIntegerEncoder.decode(bitString, index, index + BASE64_BITS); + int nextIndex = index + BASE64_BITS; + int n = FixedIntegerEncoder.decode(bitString, index, nextIndex); str.append(DICT.charAt(n)); - index += BASE64_BITS; + index = nextIndex;; } catch (DecodingException e) { throw new EncodingException("Unencodable Base64Url '" + bitString + "'"); } From b569dffbf7044b436f2df83c760ab1dfc8f1b051 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 20:32:34 -0500 Subject: [PATCH 21/49] convert fields to enums --- .../iab/gpp/encoder/field/HeaderV1Field.java | 23 ++++-- .../iab/gpp/encoder/field/TcfCaV1Field.java | 69 +++++++++------- .../iab/gpp/encoder/field/TcfEuV2Field.java | 81 +++++++++++-------- .../com/iab/gpp/encoder/field/UsCaField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsCoField.java | 51 +++++++----- .../com/iab/gpp/encoder/field/UsCtField.java | 51 +++++++----- .../com/iab/gpp/encoder/field/UsDeField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsFlField.java | 41 ++++++---- .../com/iab/gpp/encoder/field/UsIaField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsMtField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsNatField.java | 61 ++++++++------ .../com/iab/gpp/encoder/field/UsNeField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsNhField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsNjField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsOrField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsTnField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsTxField.java | 53 +++++++----- .../com/iab/gpp/encoder/field/UsUtField.java | 41 ++++++---- .../com/iab/gpp/encoder/field/UsVaField.java | 39 +++++---- .../com/iab/gpp/encoder/field/UspV1Field.java | 25 ++++-- .../gpp/encoder/section/EncodableSection.java | 8 +- .../com/iab/gpp/encoder/section/FieldKey.java | 6 ++ .../com/iab/gpp/encoder/section/HeaderV1.java | 10 +-- .../com/iab/gpp/encoder/section/TcfCaV1.java | 10 +-- .../com/iab/gpp/encoder/section/TcfEuV2.java | 8 +- .../com/iab/gpp/encoder/section/UsCa.java | 8 +- .../com/iab/gpp/encoder/section/UsCo.java | 8 +- .../com/iab/gpp/encoder/section/UsCt.java | 8 +- .../com/iab/gpp/encoder/section/UsDe.java | 8 +- .../com/iab/gpp/encoder/section/UsFl.java | 10 +-- .../com/iab/gpp/encoder/section/UsIa.java | 8 +- .../com/iab/gpp/encoder/section/UsMt.java | 8 +- .../com/iab/gpp/encoder/section/UsNat.java | 8 +- .../com/iab/gpp/encoder/section/UsNe.java | 8 +- .../com/iab/gpp/encoder/section/UsNh.java | 8 +- .../com/iab/gpp/encoder/section/UsNj.java | 8 +- .../com/iab/gpp/encoder/section/UsOr.java | 8 +- .../com/iab/gpp/encoder/section/UsTn.java | 8 +- .../com/iab/gpp/encoder/section/UsTx.java | 8 +- .../com/iab/gpp/encoder/section/UsUt.java | 10 +-- .../com/iab/gpp/encoder/section/UsVa.java | 10 +-- .../com/iab/gpp/encoder/section/UspV1.java | 10 +-- .../gpp/encoder/segment/EncodableSegment.java | 10 ++- .../encoder/segment/HeaderV1CoreSegment.java | 16 ++-- .../encoder/segment/TcfCaV1CoreSegment.java | 16 ++-- .../TcfCaV1DisclosedVendorsSegment.java | 16 ++-- .../TcfCaV1PublisherPurposesSegment.java | 16 ++-- .../encoder/segment/TcfEuV2CoreSegment.java | 16 ++-- .../TcfEuV2PublisherPurposesSegment.java | 16 ++-- .../segment/TcfEuV2VendorsAllowedSegment.java | 16 ++-- .../TcfEuV2VendorsDisclosedSegment.java | 16 ++-- .../gpp/encoder/segment/UsCaCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsCaGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsCoCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsCoGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsCtCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsCtGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsDeCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsDeGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsFlCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsIaCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsIaGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsMtCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsMtGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsNatCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsNatGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsNeCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsNeGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsNhCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsNhGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsNjCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsNjGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsOrCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsOrGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsTnCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsTnGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsTxCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsTxGpcSegment.java | 16 ++-- .../gpp/encoder/segment/UsUtCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UsVaCoreSegment.java | 16 ++-- .../gpp/encoder/segment/UspV1CoreSegment.java | 10 +-- 81 files changed, 988 insertions(+), 822 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 82c390aa..70a7170a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -1,14 +1,25 @@ package com.iab.gpp.encoder.field; -public final class HeaderV1Field { - private HeaderV1Field() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String ID = "Id"; - public static final String VERSION = "Version"; - public static final String SECTION_IDS = "SectionIds"; +public enum HeaderV1Field implements FieldKey { + ID("Id"), + VERSION("Version"), + SECTION_IDS("SectionIds"); + + private String name; + + HeaderV1Field(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 3f6026b9..8c63da89 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -1,37 +1,48 @@ package com.iab.gpp.encoder.field; -public final class TcfCaV1Field { - private TcfCaV1Field() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String CREATED = "Created"; - public static final String LAST_UPDATED = "LastUpdated"; - public static final String CMP_ID = "CmpId"; - public static final String CMP_VERSION = "CmpVersion"; - public static final String CONSENT_SCREEN = "ConsentScreen"; - public static final String CONSENT_LANGUAGE = "ConsentLanguage"; - public static final String VENDOR_LIST_VERSION = "VendorListVersion"; - public static final String TCF_POLICY_VERSION = "TcfPolicyVersion"; - public static final String USE_NON_STANDARD_STACKS = "UseNonStandardStacks"; - public static final String SPECIAL_FEATURE_EXPRESS_CONSENT = "SpecialFeatureExpressConsent"; - public static final String PURPOSES_EXPRESS_CONSENT = "PurposesExpressConsent"; - public static final String PURPOSES_IMPLIED_CONSENT = "PurposesImpliedConsent"; - public static final String VENDOR_EXPRESS_CONSENT = "VendorExpressConsent"; - public static final String VENDOR_IMPLIED_CONSENT = "VendorImpliedConsent"; - public static final String PUB_RESTRICTIONS = "PubRestrictions"; +public enum TcfCaV1Field implements FieldKey { + VERSION("Version"), + CREATED("Created"), + LAST_UPDATED("LastUpdated"), + CMP_ID("CmpId"), + CMP_VERSION("CmpVersion"), + CONSENT_SCREEN("ConsentScreen"), + CONSENT_LANGUAGE("ConsentLanguage"), + VENDOR_LIST_VERSION("VendorListVersion"), + TCF_POLICY_VERSION("TcfPolicyVersion"), + USE_NON_STANDARD_STACKS("UseNonStandardStacks"), + SPECIAL_FEATURE_EXPRESS_CONSENT("SpecialFeatureExpressConsent"), + PURPOSES_EXPRESS_CONSENT("PurposesExpressConsent"), + PURPOSES_IMPLIED_CONSENT("PurposesImpliedConsent"), + VENDOR_EXPRESS_CONSENT("VendorExpressConsent"), + VENDOR_IMPLIED_CONSENT("VendorImpliedConsent"), + PUB_RESTRICTIONS("PubRestrictions"), - public static final String PUB_PURPOSES_SEGMENT_TYPE = "PubPurposesSegmentType"; - public static final String PUB_PURPOSES_EXPRESS_CONSENT = "PubPurposesExpressConsent"; - public static final String PUB_PURPOSES_IMPLIED_CONSENT = "PubPurposesImpliedConsent"; - public static final String NUM_CUSTOM_PURPOSES = "NumCustomPurposes"; - public static final String CUSTOM_PURPOSES_EXPRESS_CONSENT = "CustomPurposesExpressConsent"; - public static final String CUSTOM_PURPOSES_IMPLIED_CONSENT = "CustomPurposesImpliedConsent"; + PUB_PURPOSES_SEGMENT_TYPE("PubPurposesSegmentType"), + PUB_PURPOSES_EXPRESS_CONSENT("PubPurposesExpressConsent"), + PUB_PURPOSES_IMPLIED_CONSENT("PubPurposesImpliedConsent"), + NUM_CUSTOM_PURPOSES("NumCustomPurposes"), + CUSTOM_PURPOSES_EXPRESS_CONSENT("CustomPurposesExpressConsent"), + CUSTOM_PURPOSES_IMPLIED_CONSENT("CustomPurposesImpliedConsent"), - public static final String DISCLOSED_VENDORS_SEGMENT_TYPE = "DisclosedVendorsSegmentType"; - public static final String DISCLOSED_VENDORS = "DisclosedVendors"; + DISCLOSED_VENDORS_SEGMENT_TYPE("DisclosedVendorsSegmentType"), + DISCLOSED_VENDORS("DisclosedVendors"); + + private String name; + + TcfCaV1Field(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.VERSION, TcfCaV1Field.CREATED, TcfCaV1Field.LAST_UPDATED, @@ -52,7 +63,7 @@ private TcfCaV1Field() {} //@formatter:on //@formatter:off - public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, @@ -63,7 +74,7 @@ private TcfCaV1Field() {} //@formatter:on //@formatter:off - public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = FieldNames.of( TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, TcfCaV1Field.DISCLOSED_VENDORS ); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 3fa0df6d..7dc29f92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,40 +1,51 @@ package com.iab.gpp.encoder.field; -public final class TcfEuV2Field { - private TcfEuV2Field() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String CREATED = "Created"; - public static final String LAST_UPDATED = "LastUpdated"; - public static final String CMP_ID = "CmpId"; - public static final String CMP_VERSION = "CmpVersion"; - public static final String CONSENT_SCREEN = "ConsentScreen"; - public static final String CONSENT_LANGUAGE = "ConsentLanguage"; - public static final String VENDOR_LIST_VERSION = "VendorListVersion"; - public static final String POLICY_VERSION = "PolicyVersion"; - public static final String IS_SERVICE_SPECIFIC = "IsServiceSpecific"; - public static final String USE_NON_STANDARD_STACKS = "UseNonStandardStacks"; - public static final String SPECIAL_FEATURE_OPTINS = "SpecialFeatureOptins"; - public static final String PURPOSE_CONSENTS = "PurposeConsents"; - public static final String PURPOSE_LEGITIMATE_INTERESTS = "PurposeLegitimateInterests"; - public static final String PURPOSE_ONE_TREATMENT = "PurposeOneTreatment"; - public static final String PUBLISHER_COUNTRY_CODE = "PublisherCountryCode"; - public static final String VENDOR_CONSENTS = "VendorConsents"; - public static final String VENDOR_LEGITIMATE_INTERESTS = "VendorLegitimateInterests"; - public static final String PUBLISHER_RESTRICTIONS = "PublisherRestrictions"; - public static final String PUBLISHER_PURPOSES_SEGMENT_TYPE = "PublisherPurposesSegmentType"; - public static final String PUBLISHER_CONSENTS = "PublisherConsents"; - public static final String PUBLISHER_LEGITIMATE_INTERESTS = "PublisherLegitimateInterests"; - public static final String NUM_CUSTOM_PURPOSES = "NumCustomPurposes"; - public static final String PUBLISHER_CUSTOM_CONSENTS = "PublisherCustomConsents"; - public static final String PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS = "PublisherCustomLegitimateInterests"; - public static final String VENDORS_ALLOWED_SEGMENT_TYPE = "VendorsAllowedSegmentType"; - public static final String VENDORS_ALLOWED = "VendorsAllowed"; - public static final String VENDORS_DISCLOSED_SEGMENT_TYPE = "VendorsDisclosedSegmentType"; - public static final String VENDORS_DISCLOSED = "VendorsDisclosed"; +public enum TcfEuV2Field implements FieldKey { + VERSION("Version"), + CREATED("Created"), + LAST_UPDATED("LastUpdated"), + CMP_ID("CmpId"), + CMP_VERSION("CmpVersion"), + CONSENT_SCREEN("ConsentScreen"), + CONSENT_LANGUAGE("ConsentLanguage"), + VENDOR_LIST_VERSION("VendorListVersion"), + POLICY_VERSION("PolicyVersion"), + IS_SERVICE_SPECIFIC("IsServiceSpecific"), + USE_NON_STANDARD_STACKS("UseNonStandardStacks"), + SPECIAL_FEATURE_OPTINS("SpecialFeatureOptins"), + PURPOSE_CONSENTS("PurposeConsents"), + PURPOSE_LEGITIMATE_INTERESTS("PurposeLegitimateInterests"), + PURPOSE_ONE_TREATMENT("PurposeOneTreatment"), + PUBLISHER_COUNTRY_CODE("PublisherCountryCode"), + VENDOR_CONSENTS("VendorConsents"), + VENDOR_LEGITIMATE_INTERESTS("VendorLegitimateInterests"), + PUBLISHER_RESTRICTIONS("PublisherRestrictions"), + PUBLISHER_PURPOSES_SEGMENT_TYPE("PublisherPurposesSegmentType"), + PUBLISHER_CONSENTS("PublisherConsents"), + PUBLISHER_LEGITIMATE_INTERESTS("PublisherLegitimateInterests"), + NUM_CUSTOM_PURPOSES("NumCustomPurposes"), + PUBLISHER_CUSTOM_CONSENTS("PublisherCustomConsents"), + PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS("PublisherCustomLegitimateInterests"), + VENDORS_ALLOWED_SEGMENT_TYPE("VendorsAllowedSegmentType"), + VENDORS_ALLOWED("VendorsAllowed"), + VENDORS_DISCLOSED_SEGMENT_TYPE("VendorsDisclosedSegmentType"), + VENDORS_DISCLOSED("VendorsDisclosed"); + + private String name; + + TcfEuV2Field(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VERSION, TcfEuV2Field.CREATED, TcfEuV2Field.LAST_UPDATED, @@ -58,7 +69,7 @@ private TcfEuV2Field() {} //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, TcfEuV2Field.PUBLISHER_CONSENTS, TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, @@ -69,14 +80,14 @@ private TcfEuV2Field() {} //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED ); //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = FieldNames.of( TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_DISCLOSED ); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 3b5ef779..4279c41c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsCaField { - private UsCaField() {} - - public static final String VERSION = "Version"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String SHARING_OPT_OUT_NOTICE = "SharingOptOutNotice"; - public static final String SENSITIVE_DATA_LIMIT_USE_NOTICE = "SensitiveDataLimitUseNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String SHARING_OPT_OUT = "SharingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String PERSONAL_DATA_CONSENTS = "PersonalDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsCaField implements FieldKey { + VERSION("Version"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + SHARING_OPT_OUT_NOTICE("SharingOptOutNotice"), + SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice"), + SALE_OPT_OUT("SaleOptOut"), + SHARING_OPT_OUT("SharingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + PERSONAL_DATA_CONSENTS("PersonalDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsCaField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCaField.VERSION, UsCaField.SALE_OPT_OUT_NOTICE, UsCaField.SHARING_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsCaField() {} //@formatter:on //@formatter:off - public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCaField.GPC_SEGMENT_TYPE, UsCaField.GPC_SEGMENT_INCLUDED, UsCaField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 516c32a8..00f1c36c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -1,26 +1,37 @@ package com.iab.gpp.encoder.field; -public final class UsCoField { - private UsCoField() {} - - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsCoField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsCoField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCoField.VERSION, UsCoField.SHARING_NOTICE, UsCoField.SALE_OPT_OUT_NOTICE, @@ -36,7 +47,7 @@ private UsCoField() {} //@formatter:on //@formatter:off - public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCoField.GPC_SEGMENT_TYPE, UsCoField.GPC_SEGMENT_INCLUDED, UsCoField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 56700df9..abcb9aad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -1,26 +1,37 @@ package com.iab.gpp.encoder.field; -public final class UsCtField { - private UsCtField() {} - - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsCtField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsCtField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsCtField.VERSION, UsCtField.SHARING_NOTICE, UsCtField.SALE_OPT_OUT_NOTICE, @@ -36,7 +47,7 @@ private UsCtField() {} //@formatter:on //@formatter:off - public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsCtField.GPC_SEGMENT_TYPE, UsCtField.GPC_SEGMENT_INCLUDED, UsCtField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 7e52bcaf..7670bacf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsDeField { - private UsDeField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsDeField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsDeField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsDeField.VERSION, UsDeField.PROCESSING_NOTICE, UsDeField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsDeField() {} //@formatter:on //@formatter:off - public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsDeField.GPC_SEGMENT_TYPE, UsDeField.GPC_SEGMENT_INCLUDED, UsDeField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index ae50962c..04ace53b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -1,23 +1,34 @@ package com.iab.gpp.encoder.field; -public final class UsFlField { - private UsFlField() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; +public enum UsFlField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + + private String name; + + UsFlField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsFlField.VERSION, UsFlField.PROCESSING_NOTICE, UsFlField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index 90d2662a..5defbe4f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsIaField { - private UsIaField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SENSITIVE_DATA_OPT_OUT_NOTICE = "SensitiveDataOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsIaField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SENSITIVE_DATA_OPT_OUT_NOTICE("SensitiveDataOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsIaField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsIaField.VERSION, UsIaField.PROCESSING_NOTICE, UsIaField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsIaField() {} //@formatter:on //@formatter:off - public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsIaField.GPC_SEGMENT_TYPE, UsIaField.GPC_SEGMENT_INCLUDED, UsIaField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index f3946b6f..ccdbfa98 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsMtField { - private UsMtField() {} - - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsMtField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsMtField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsMtField.VERSION, UsMtField.SHARING_NOTICE, UsMtField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsMtField() {} //@formatter:on //@formatter:off - public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsMtField.GPC_SEGMENT_TYPE, UsMtField.GPC_SEGMENT_INCLUDED, UsMtField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index d43cb586..c51b9652 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,31 +1,42 @@ package com.iab.gpp.encoder.field; -public final class UsNatField { - private UsNatField() {} - - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String SHARING_OPT_OUT_NOTICE = "SharingOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE = "SensitiveDataProcessingOptOutNotice"; - public static final String SENSITIVE_DATA_LIMIT_USE_NOTICE = "SensitiveDataLimitUseNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String SHARING_OPT_OUT = "SharingOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String PERSONAL_DATA_CONSENTS = "PersonalDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsNatField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + SHARING_OPT_OUT_NOTICE("SharingOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice"), + SENSITIVE_DATA_LIMIT_USE_NOTICE("SensitiveDataLimitUseNotice"), + SALE_OPT_OUT("SaleOptOut"), + SHARING_OPT_OUT("SharingOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + PERSONAL_DATA_CONSENTS("PersonalDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsNatField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNatField.VERSION, UsNatField.SHARING_NOTICE, UsNatField.SALE_OPT_OUT_NOTICE, @@ -46,7 +57,7 @@ private UsNatField() {} //@formatter:on //@formatter:off - public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 93a99130..1b57a1c6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsNeField { - private UsNeField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsNeField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsNeField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNeField.VERSION, UsNeField.PROCESSING_NOTICE, UsNeField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsNeField() {} //@formatter:on //@formatter:off - public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNeField.GPC_SEGMENT_TYPE, UsNeField.GPC_SEGMENT_INCLUDED, UsNeField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 44b99fbe..4b0016b7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsNhField { - private UsNhField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsNhField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsNhField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNhField.VERSION, UsNhField.PROCESSING_NOTICE, UsNhField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsNhField() {} //@formatter:on //@formatter:off - public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNhField.GPC_SEGMENT_TYPE, UsNhField.GPC_SEGMENT_INCLUDED, UsNhField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 1ef95e28..a1282d17 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsNjField { - private UsNjField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsNjField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsNjField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsNjField.VERSION, UsNjField.PROCESSING_NOTICE, UsNjField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsNjField() {} //@formatter:on //@formatter:off - public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsNjField.GPC_SEGMENT_TYPE, UsNjField.GPC_SEGMENT_INCLUDED, UsNjField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index adf05255..3c131c4e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsOrField { - private UsOrField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsOrField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsOrField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsOrField.VERSION, UsOrField.PROCESSING_NOTICE, UsOrField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsOrField() {} //@formatter:on //@formatter:off - public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsOrField.GPC_SEGMENT_TYPE, UsOrField.GPC_SEGMENT_INCLUDED, UsOrField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 4271199e..5879e7df 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsTnField { - private UsTnField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsTnField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsTnField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsTnField.VERSION, UsTnField.PROCESSING_NOTICE, UsTnField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsTnField() {} //@formatter:on //@formatter:off - public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsTnField.GPC_SEGMENT_TYPE, UsTnField.GPC_SEGMENT_INCLUDED, UsTnField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 5729593a..63f4ec18 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -1,27 +1,38 @@ package com.iab.gpp.encoder.field; -public final class UsTxField { - private UsTxField() {} - - public static final String VERSION = "Version"; - public static final String PROCESSING_NOTICE = "ProcessingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String ADDITIONAL_DATA_PROCESSING_CONSENT = "AdditionalDataProcessingConsent"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; - - public static final String GPC_SEGMENT_TYPE = "GpcSegmentType"; - public static final String GPC_SEGMENT_INCLUDED = "GpcSegmentIncluded"; - public static final String GPC = "Gpc"; +import com.iab.gpp.encoder.section.FieldKey; + +public enum UsTxField implements FieldKey { + VERSION("Version"), + PROCESSING_NOTICE("ProcessingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + ADDITIONAL_DATA_PROCESSING_CONSENT("AdditionalDataProcessingConsent"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"), + + GPC_SEGMENT_TYPE("GpcSegmentType"), + GPC_SEGMENT_INCLUDED("GpcSegmentIncluded"), + GPC("Gpc"); + + private String name; + + UsTxField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsTxField.VERSION, UsTxField.PROCESSING_NOTICE, UsTxField.SALE_OPT_OUT_NOTICE, @@ -38,7 +49,7 @@ private UsTxField() {} //@formatter:on //@formatter:off - public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( UsTxField.GPC_SEGMENT_TYPE, UsTxField.GPC_SEGMENT_INCLUDED, UsTxField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 4cc9ff47..6d65cb51 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -1,23 +1,34 @@ package com.iab.gpp.encoder.field; -public final class UsUtField { - private UsUtField() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE = "SensitiveDataProcessingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; +public enum UsUtField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE("SensitiveDataProcessingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + + private String name; + + UsUtField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsUtField.VERSION, UsUtField.SHARING_NOTICE, UsUtField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index dd9e75cf..64b5fe6f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -1,22 +1,33 @@ package com.iab.gpp.encoder.field; -public final class UsVaField { - private UsVaField() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String SHARING_NOTICE = "SharingNotice"; - public static final String SALE_OPT_OUT_NOTICE = "SaleOptOutNotice"; - public static final String TARGETED_ADVERTISING_OPT_OUT_NOTICE = "TargetedAdvertisingOptOutNotice"; - public static final String SALE_OPT_OUT = "SaleOptOut"; - public static final String TARGETED_ADVERTISING_OPT_OUT = "TargetedAdvertisingOptOut"; - public static final String SENSITIVE_DATA_PROCESSING = "SensitiveDataProcessing"; - public static final String KNOWN_CHILD_SENSITIVE_DATA_CONSENTS = "KnownChildSensitiveDataConsents"; - public static final String MSPA_COVERED_TRANSACTION = "MspaCoveredTransaction"; - public static final String MSPA_OPT_OUT_OPTION_MODE = "MspaOptOutOptionMode"; - public static final String MSPA_SERVICE_PROVIDER_MODE = "MspaServiceProviderMode"; +public enum UsVaField implements FieldKey { + VERSION("Version"), + SHARING_NOTICE("SharingNotice"), + SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), + TARGETED_ADVERTISING_OPT_OUT_NOTICE("TargetedAdvertisingOptOutNotice"), + SALE_OPT_OUT("SaleOptOut"), + TARGETED_ADVERTISING_OPT_OUT("TargetedAdvertisingOptOut"), + SENSITIVE_DATA_PROCESSING("SensitiveDataProcessing"), + KNOWN_CHILD_SENSITIVE_DATA_CONSENTS("KnownChildSensitiveDataConsents"), + MSPA_COVERED_TRANSACTION("MspaCoveredTransaction"), + MSPA_OPT_OUT_OPTION_MODE("MspaOptOutOptionMode"), + MSPA_SERVICE_PROVIDER_MODE("MspaServiceProviderMode"); + + private String name; + + UsVaField(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UsVaField.VERSION, UsVaField.SHARING_NOTICE, UsVaField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index 9b497991..c75ba981 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -1,15 +1,26 @@ package com.iab.gpp.encoder.field; -public final class UspV1Field { - private UspV1Field() {} +import com.iab.gpp.encoder.section.FieldKey; - public static final String VERSION = "Version"; - public static final String NOTICE = "Notice"; - public static final String OPT_OUT_SALE = "OptOutSale"; - public static final String LSPA_COVERED = "LspaCovered"; +public enum UspV1Field implements FieldKey { + VERSION("Version"), + NOTICE("Notice"), + OPT_OUT_SALE("OptOutSale"), + LSPA_COVERED("LspaCovered"); + + private String name; + + UspV1Field(String name) { + this.name = name; + } + + @Override + public String getName() { + return name; + } //@formatter:off - public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( UspV1Field.VERSION, UspV1Field.NOTICE, UspV1Field.OPT_OUT_SALE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index a7324eef..2e12e2d5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.section; -public interface EncodableSection { +public interface EncodableSection & FieldKey> { int getId(); @@ -8,6 +8,12 @@ public interface EncodableSection { int getVersion(); + boolean hasField(E fieldName); + + Object getFieldValue(E fieldName); + + void setFieldValue(E fieldName, Object value); + boolean hasField(String fieldName); Object getFieldValue(String fieldName); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java new file mode 100644 index 00000000..83c4aaa9 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java @@ -0,0 +1,6 @@ +package com.iab.gpp.encoder.section; + +public interface FieldKey { + String getName(); + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 3e6faa0c..c7dcfb25 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; -public class HeaderV1 extends AbstractLazilyEncodableSection { +public class HeaderV1 extends AbstractLazilyEncodableSection { public static final int ID = 3; public static final int VERSION = 1; @@ -39,12 +39,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new HeaderV1CoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -59,9 +59,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { + for(EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index e082f067..5d1639ce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -14,7 +14,7 @@ import com.iab.gpp.encoder.segment.TcfCaV1DisclosedVendorsSegment; import com.iab.gpp.encoder.segment.TcfCaV1PublisherPurposesSegment; -public class TcfCaV1 extends AbstractLazilyEncodableSection { +public class TcfCaV1 extends AbstractLazilyEncodableSection { public static final int ID = 5; public static final int VERSION = 1; @@ -45,12 +45,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); } @Override - public List decodeSection(CharSequence encodedString) { + public List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { @@ -87,7 +87,7 @@ public List decodeSection(CharSequence encodedString) { } @Override - public CharSequence encodeSection(List segments) { + public CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -100,7 +100,7 @@ public CharSequence encodeSection(List segments) { } @Override - public void setFieldValue(String fieldName, Object value) throws InvalidFieldException { + public void setFieldValue(TcfCaV1Field fieldName, Object value) throws InvalidFieldException { super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 3c378d46..7aaf4989 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -15,7 +15,7 @@ import com.iab.gpp.encoder.segment.TcfEuV2VendorsAllowedSegment; import com.iab.gpp.encoder.segment.TcfEuV2VendorsDisclosedSegment; -public class TcfEuV2 extends AbstractLazilyEncodableSection { +public class TcfEuV2 extends AbstractLazilyEncodableSection { public static final int ID = 2; public static final int VERSION = 2; @@ -46,12 +46,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); } @Override - public List decodeSection(CharSequence encodedString) { + public List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { @@ -92,7 +92,7 @@ public List decodeSection(CharSequence encodedString) { } @Override - public CharSequence encodeSection(List segments) { + public CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index d737de1d..9e00e72f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCaCoreSegment; import com.iab.gpp.encoder.segment.UsCaGpcSegment; -public class UsCa extends AbstractLazilyEncodableSection { +public class UsCa extends AbstractLazilyEncodableSection { public static final int ID = 8; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsCaCoreSegment(), new UsCaGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 31a40d9d..91e3adae 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCoCoreSegment; import com.iab.gpp.encoder.segment.UsCoGpcSegment; -public class UsCo extends AbstractLazilyEncodableSection { +public class UsCo extends AbstractLazilyEncodableSection { public static final int ID = 10; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsCoCoreSegment(), new UsCoGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 3bc3c5b6..225fbc3a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCtCoreSegment; import com.iab.gpp.encoder.segment.UsCtGpcSegment; -public class UsCt extends AbstractLazilyEncodableSection { +public class UsCt extends AbstractLazilyEncodableSection { public static final int ID = 12; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsCtCoreSegment(), new UsCtGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index cd3b11c5..de0ac909 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsDeCoreSegment; import com.iab.gpp.encoder.segment.UsDeGpcSegment; -public class UsDe extends AbstractLazilyEncodableSection { +public class UsDe extends AbstractLazilyEncodableSection { public static final int ID = 17; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsDeCoreSegment(), new UsDeGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if (!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 3c8888e1..771e6278 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsFlCoreSegment; -public class UsFl extends AbstractLazilyEncodableSection { +public class UsFl extends AbstractLazilyEncodableSection { public static final int ID = 13; public static final int VERSION = 1; @@ -39,12 +39,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new UsFlCoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -59,9 +59,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for (EncodableSegment segment : segments) { + for (EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index b7ffc38e..d19650e7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsIaCoreSegment; import com.iab.gpp.encoder.segment.UsIaGpcSegment; -public class UsIa extends AbstractLazilyEncodableSection { +public class UsIa extends AbstractLazilyEncodableSection { public static final int ID = 18; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsIaCoreSegment(), new UsIaGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if (!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index a4e57d2f..0e5a0df9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsMtCoreSegment; import com.iab.gpp.encoder.segment.UsMtGpcSegment; -public class UsMt extends AbstractLazilyEncodableSection { +public class UsMt extends AbstractLazilyEncodableSection { public static final int ID = 14; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsMtCoreSegment(), new UsMtGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 64b6c8f0..480178f3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNatCoreSegment; import com.iab.gpp.encoder.segment.UsNatGpcSegment; -public class UsNat extends AbstractLazilyEncodableSection { +public class UsNat extends AbstractLazilyEncodableSection { public static final int ID = 7; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsNatCoreSegment(), new UsNatGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index a009def8..e4d4f32e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNeCoreSegment; import com.iab.gpp.encoder.segment.UsNeGpcSegment; -public class UsNe extends AbstractLazilyEncodableSection { +public class UsNe extends AbstractLazilyEncodableSection { public static final int ID = 19; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsNeCoreSegment(), new UsNeGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index a907d2ed..fbeae34a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNhCoreSegment; import com.iab.gpp.encoder.segment.UsNhGpcSegment; -public class UsNh extends AbstractLazilyEncodableSection { +public class UsNh extends AbstractLazilyEncodableSection { public static final int ID = 20; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsNhCoreSegment(), new UsNhGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index c5c648ea..bf5297cf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNjCoreSegment; import com.iab.gpp.encoder.segment.UsNjGpcSegment; -public class UsNj extends AbstractLazilyEncodableSection { +public class UsNj extends AbstractLazilyEncodableSection { public static final int ID = 21; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsNjCoreSegment(), new UsNjGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 41d0d3ce..97c771e5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsOrCoreSegment; import com.iab.gpp.encoder.segment.UsOrGpcSegment; -public class UsOr extends AbstractLazilyEncodableSection { +public class UsOr extends AbstractLazilyEncodableSection { public static final int ID = 15; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsOrCoreSegment(), new UsOrGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 23b17edf..e582d57d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsTnCoreSegment; import com.iab.gpp.encoder.segment.UsTnGpcSegment; -public class UsTn extends AbstractLazilyEncodableSection { +public class UsTn extends AbstractLazilyEncodableSection { public static final int ID = 22; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsTnCoreSegment(), new UsTnGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 521ff729..2f7f2e70 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsTxCoreSegment; import com.iab.gpp.encoder.segment.UsTxGpcSegment; -public class UsTx extends AbstractLazilyEncodableSection { +public class UsTx extends AbstractLazilyEncodableSection { public static final int ID = 16; public static final int VERSION = 1; @@ -40,12 +40,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Arrays.asList(new UsTxCoreSegment(), new UsTxGpcSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if(encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -65,7 +65,7 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); if(!segments.isEmpty()) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 05cc7836..caec1ae6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsUtCoreSegment; -public class UsUt extends AbstractLazilyEncodableSection { +public class UsUt extends AbstractLazilyEncodableSection { public static final int ID = 11; public static final int VERSION = 1; @@ -39,12 +39,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new UsUtCoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -59,9 +59,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { + for(EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 95a0abd0..efd499ee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -8,7 +8,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsVaCoreSegment; -public class UsVa extends AbstractLazilyEncodableSection { +public class UsVa extends AbstractLazilyEncodableSection { public static final int ID = 9; public static final int VERSION = 1; @@ -39,12 +39,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new UsVaCoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -59,9 +59,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for (EncodableSegment segment : segments) { + for (EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index 0e1f7f88..ef76b18d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -7,7 +7,7 @@ import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UspV1CoreSegment; -public class UspV1 extends AbstractLazilyEncodableSection { +public class UspV1 extends AbstractLazilyEncodableSection { public static final int ID = 6; public static final int VERSION = 1; @@ -38,12 +38,12 @@ public int getVersion() { } @Override - protected List initializeSegments() { + protected List> initializeSegments() { return Collections.singletonList(new UspV1CoreSegment()); } @Override - protected List decodeSection(CharSequence encodedString) { + protected List> decodeSection(CharSequence encodedString) { if (encodedString != null && encodedString.length() > 0) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); @@ -58,9 +58,9 @@ protected List decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection(List segments) { + protected CharSequence encodeSection(List> segments) { List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { + for(EncodableSegment segment : segments) { encodedSegments.add(segment.encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 033b14c9..15c529d7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,7 +1,15 @@ package com.iab.gpp.encoder.segment; -public interface EncodableSegment { +import com.iab.gpp.encoder.section.FieldKey; +public interface EncodableSegment & FieldKey> { + + boolean hasField(E fieldName); + + Object getFieldValue(E fieldName); + + void setFieldValue(E fieldName, Object value); + boolean hasField(String fieldName); Object getFieldValue(String fieldName); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index adea375e..3ac48afd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.HeaderV1; -public final class HeaderV1CoreSegment extends AbstractLazilyEncodableSegment { +public final class HeaderV1CoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public HeaderV1CoreSegment() { super(); @@ -27,8 +25,8 @@ public HeaderV1CoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); fields.put(HeaderV1Field.ID, new EncodableFixedInteger(6, HeaderV1.ID)); fields.put(HeaderV1Field.VERSION, new EncodableFixedInteger(6, HeaderV1.VERSION)); fields.put(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange()); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode HeaderV1CoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 5b081f6e..5d16c84b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -18,10 +17,9 @@ import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.section.TcfCaV1; -public final class TcfCaV1CoreSegment extends AbstractLazilyEncodableSegment { +public final class TcfCaV1CoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfCaV1CoreSegment() { super(); @@ -33,11 +31,11 @@ public TcfCaV1CoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { + protected EncodableBitStringFields initializeFields() { // NOTE: TcfCaV1.setFieldValue records modifications Instant date = Instant.EPOCH; - EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); fields.put(TcfCaV1Field.CREATED, new EncodableDatetime(date)); fields.put(TcfCaV1Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -58,19 +56,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1CoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 7d1f83a9..6c30191a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -4,17 +4,15 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public final class TcfCaV1DisclosedVendorsSegment extends AbstractLazilyEncodableSegment { +public final class TcfCaV1DisclosedVendorsSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfCaV1DisclosedVendorsSegment() { super(); @@ -26,27 +24,27 @@ public TcfCaV1DisclosedVendorsSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange()); return fields; } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1DisclosedVendorsSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 0424bb5d..fbda3a87 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; @@ -13,10 +12,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public final class TcfCaV1PublisherPurposesSegment extends AbstractLazilyEncodableSegment { +public final class TcfCaV1PublisherPurposesSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfCaV1PublisherPurposesSegment() { super(); @@ -28,8 +26,8 @@ public TcfCaV1PublisherPurposesSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); fields.put(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); @@ -55,19 +53,19 @@ public int getAsInt() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfCaV1PublisherPurposesSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 98f81351..5ff3698f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -18,10 +17,9 @@ import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.section.TcfEuV2; -public final class TcfEuV2CoreSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2CoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2CoreSegment() { super(); @@ -33,11 +31,11 @@ public TcfEuV2CoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { + protected EncodableBitStringFields initializeFields() { // NOTE: TcfEuV2.setFieldValue records modifications Instant date = Instant.EPOCH; - EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VERSION, new EncodableFixedInteger(6, TcfEuV2.VERSION)); fields.put(TcfEuV2Field.CREATED, new EncodableDatetime(date)); fields.put(TcfEuV2Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -62,19 +60,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2CoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 69135848..1c547c73 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -5,7 +5,6 @@ import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; @@ -13,10 +12,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2PublisherPurposesSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2PublisherPurposesSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2PublisherPurposesSegment() { super(); @@ -28,8 +26,8 @@ public TcfEuV2PublisherPurposesSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfEuV2Field.PUBLISHER_CONSENTS, new EncodableFixedBitfield(24)); fields.put(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); @@ -55,19 +53,19 @@ public int getAsInt() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2PublisherPurposesSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 9bd9a7c3..0c8b721b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -4,17 +4,15 @@ import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2VendorsAllowedSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2VendorsAllowedSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2VendorsAllowedSegment() { super(); @@ -26,27 +24,27 @@ public TcfEuV2VendorsAllowedSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, new EncodableFixedInteger(3, 2)); fields.put(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange()); return fields; } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2VendorsAllowedSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 4db588ed..15296c92 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -4,17 +4,15 @@ import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2VendorsDisclosedSegment extends AbstractLazilyEncodableSegment { +public final class TcfEuV2VendorsDisclosedSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public TcfEuV2VendorsDisclosedSegment() { super(); @@ -26,27 +24,27 @@ public TcfEuV2VendorsDisclosedSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange()); return fields; } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode TcfEuV2VendorsDisclosedSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 0072a91f..2c54f993 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.section.UsCa; -public final class UsCaCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsCaCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCaCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsCaCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); fields.put(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); fields.put(UsCaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index ed72554c..6510708f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCaField; -public final class UsCaGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsCaGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCaGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsCaGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); fields.put(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCaField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCaGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index deafdc52..86a85d74 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.section.UsCo; -public final class UsCoCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsCoCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCoCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsCoCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); fields.put(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); fields.put(UsCoField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -54,19 +52,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCoCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 509e8aaf..587036e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCoField; -public final class UsCoGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsCoGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCoGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsCoGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); fields.put(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCoField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCoGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index 46535363..bacd8f06 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.section.UsCt; -public final class UsCtCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsCtCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCtCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsCtCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); fields.put(UsCtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -55,19 +53,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCtCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index b15c2ab5..9caefcce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCtField; -public final class UsCtGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsCtGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsCtGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsCtGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); fields.put(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCtField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsCtGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 6b935cf8..e1f3ff2b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.section.UsDe; -public final class UsDeCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsDeCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsDeCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsDeCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); fields.put(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); fields.put(UsDeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -58,19 +56,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsDeCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 6978a358..bc7338f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsDeField; -public final class UsDeGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsDeGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsDeGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsDeGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); fields.put(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsDeField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsDeGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 9e6e49b7..61dfb5af 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.section.UsFl; -public final class UsFlCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsFlCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsFlCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsFlCoreSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); fields.put(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); fields.put(UsFlField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsFlCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 087f0445..7432a589 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsIaField; import com.iab.gpp.encoder.section.UsIa; -public final class UsIaCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsIaCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsIaCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsIaCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); fields.put(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); fields.put(UsIaField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsIaCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 02a9eb1e..59695f80 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsIaField; -public final class UsIaGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsIaGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsIaGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsIaGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); fields.put(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsIaField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsIaGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 89cad156..85858c49 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.section.UsMt; -public final class UsMtCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsMtCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsMtCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsMtCoreSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); fields.put(UsMtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsMtCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 60c2e3b9..086243a6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsMtField; -public final class UsMtGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsMtGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsMtGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsMtGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); fields.put(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsMtField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsMtGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index e5e60e3e..f70f479b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.section.UsNat; -public final class UsNatCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNatCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNatCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsNatCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); fields.put(UsNatField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -65,13 +63,13 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } @@ -92,7 +90,7 @@ protected void decodeSegment(CharSequence encodedString, EncodableBitStringField bitString = builder.build(); } - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNatCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 5d0771a3..07319157 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNatField; -public final class UsNatGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNatGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNatGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsNatGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNatField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNatGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index 52d06230..f3d6462a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.section.UsNe; -public final class UsNeCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNeCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNeCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsNeCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); fields.put(UsNeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNeCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 16b3e688..36b80634 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNeField; -public final class UsNeGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNeGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNeGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsNeGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNeField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNeGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 44ce9219..5940fcba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.section.UsNh; -public final class UsNhCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNhCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNhCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsNhCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); fields.put(UsNhField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNhCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 1343c79e..569d52d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNhField; -public final class UsNhGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNhGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNhGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsNhGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNhField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNhGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 3de4bb2f..14ad705e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.section.UsNj; -public final class UsNjCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsNjCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNjCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsNjCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); fields.put(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); fields.put(UsNjField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNjCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index e5b14d7e..611b97c2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNjField; -public final class UsNjGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsNjGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsNjGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsNjGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); fields.put(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNjField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsNjGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index a1278600..9a66f0f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsOrField; import com.iab.gpp.encoder.section.UsOr; -public final class UsOrCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsOrCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsOrCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsOrCoreSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); fields.put(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); fields.put(UsOrField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsOrCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 087a6d3d..72e33543 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsOrField; -public final class UsOrGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsOrGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsOrGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsOrGpcSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); fields.put(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsOrField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsOrGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index c22afdf6..dbd4ad61 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.section.UsTn; -public final class UsTnCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsTnCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTnCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsTnCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); fields.put(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); fields.put(UsTnField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsTnCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index 12c5aab3..a0e320fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTnField; -public final class UsTnGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsTnGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTnGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsTnGpcSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); fields.put(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTnField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsTnGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 8c67106a..7489d79c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsTxField; import com.iab.gpp.encoder.section.UsTx; -public final class UsTxCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsTxCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTxCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsTxCoreSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); fields.put(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); fields.put(UsTxField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsTxCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index 33626df8..c0453c74 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTxField; -public final class UsTxGpcSegment extends AbstractLazilyEncodableSegment { +public final class UsTxGpcSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsTxGpcSegment() { super(); @@ -27,8 +25,8 @@ public UsTxGpcSegment(CharSequence encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); fields.put(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTxField.GPC, new EncodableBoolean(false)); @@ -36,19 +34,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if(encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsTxGpcSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 27e42ca4..6cc20375 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.section.UsUt; -public final class UsUtCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsUtCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsUtCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsUtCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); fields.put(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); fields.put(UsUtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -57,19 +55,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsUtCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index d0028cb6..b9a1a49a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -4,7 +4,6 @@ import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; -import com.iab.gpp.encoder.bitstring.BitStringEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.error.DecodingException; @@ -12,10 +11,9 @@ import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.section.UsVa; -public final class UsVaCoreSegment extends AbstractLazilyEncodableSegment { +public final class UsVaCoreSegment extends AbstractLazilyEncodableSegment> { private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); - private static final BitStringEncoder bitStringEncoder = BitStringEncoder.getInstance(); public UsVaCoreSegment() { super(); @@ -27,8 +25,8 @@ public UsVaCoreSegment(String encodedString) { } @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); + protected EncodableBitStringFields initializeFields() { + EncodableBitStringFields fields = new EncodableBitStringFields<>(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); fields.put(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); fields.put(UsVaField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -55,19 +53,19 @@ protected EncodableBitStringFields initializeFields() { } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = bitStringEncoder.encode(fields); + protected StringBuilder encodeSegment(EncodableBitStringFields fields) { + BitStringBuilder bitString = fields.encode(); return base64UrlEncoder.encode(bitString); } @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { + protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { if (encodedString == null || encodedString.length() == 0) { this.fields.reset(fields); } try { BitString bitString = base64UrlEncoder.decode(encodedString); - bitStringEncoder.decode(bitString, fields); + this.fields.decode(bitString); } catch (Exception e) { throw new DecodingException("Unable to decode UsVaCoreSegment '" + encodedString + "'", e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 0dce8a33..089147d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -7,7 +7,7 @@ import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.section.UspV1; -public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment { +public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment> { public UspV1CoreSegment() { super(); @@ -19,8 +19,8 @@ public UspV1CoreSegment(String encodedString) { } @Override - protected GenericFields initializeFields() { - GenericFields fields = new GenericFields(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); + protected GenericFields initializeFields() { + GenericFields fields = new GenericFields<>(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); fields.put(UspV1Field.VERSION, new UnencodableInteger(UspV1.VERSION)); fields.put(UspV1Field.NOTICE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); fields.put(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); @@ -29,7 +29,7 @@ protected GenericFields initializeFields() { } @Override - protected StringBuilder encodeSegment(GenericFields fields) { + protected StringBuilder encodeSegment(GenericFields fields) { StringBuilder str = new StringBuilder(); str.append(fields.get(UspV1Field.VERSION).getValue()); str.append(fields.get(UspV1Field.NOTICE).getValue()); @@ -39,7 +39,7 @@ protected StringBuilder encodeSegment(GenericFields fields) { } @Override - protected void decodeSegment(CharSequence encodedString, GenericFields fields) { + protected void decodeSegment(CharSequence encodedString, GenericFields fields) { if (encodedString == null || encodedString.length() != 4) { throw new DecodingException("Invalid uspv1 string: '" + encodedString + "'"); } From af6ab8d8d0eff161311b9f040baf415fcd56c10e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 21:13:33 -0500 Subject: [PATCH 22/49] thin segments --- .../segment/AbstractBase64Segment.java | 44 ++++++++++++ .../encoder/segment/HeaderV1CoreSegment.java | 41 +----------- .../encoder/segment/TcfCaV1CoreSegment.java | 41 +----------- .../TcfCaV1DisclosedVendorsSegment.java | 40 +---------- .../TcfCaV1PublisherPurposesSegment.java | 40 +---------- .../encoder/segment/TcfEuV2CoreSegment.java | 40 +---------- .../TcfEuV2PublisherPurposesSegment.java | 40 +---------- .../segment/TcfEuV2VendorsAllowedSegment.java | 40 +---------- .../TcfEuV2VendorsDisclosedSegment.java | 40 +---------- .../gpp/encoder/segment/UsCaCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsCaGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsCoCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsCoGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsCtCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsCtGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsDeCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsDeGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsFlCoreSegment.java | 40 +---------- .../gpp/encoder/segment/UsIaCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsIaGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsMtCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsMtGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsNatCoreSegment.java | 67 +++++-------------- .../gpp/encoder/segment/UsNatGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsNeCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsNeGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsNhCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsNhGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsNjCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsNjGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsOrCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsOrGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsTnCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsTnGpcSegment.java | 40 +---------- .../gpp/encoder/segment/UsTxCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsTxGpcSegment.java | 41 +----------- .../gpp/encoder/segment/UsUtCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UsVaCoreSegment.java | 41 +----------- .../gpp/encoder/segment/UspV1CoreSegment.java | 21 ++---- 39 files changed, 139 insertions(+), 1450 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java new file mode 100644 index 00000000..270686d0 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -0,0 +1,44 @@ +package com.iab.gpp.encoder.segment; + +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.bitstring.BitString; +import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; +import com.iab.gpp.encoder.error.DecodingException; +import com.iab.gpp.encoder.field.EncodableBitStringFields; +import com.iab.gpp.encoder.field.FieldNames; +import com.iab.gpp.encoder.field.UsCaField; +import com.iab.gpp.encoder.section.FieldKey; + +public abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { + + private final AbstractBase64UrlEncoder base64UrlEncoder; + protected AbstractBase64Segment(FieldNames fieldNames, AbstractBase64UrlEncoder base64UrlEncoder) { + super(fieldNames); + this.base64UrlEncoder = base64UrlEncoder; + } + + @Override + protected final StringBuilder encodeSegment() { + BitStringBuilder bitString = fields.encode(); + return base64UrlEncoder.encode(bitString); + } + + @Override + protected final void decodeSegment(CharSequence encodedString) { + if (encodedString == null || encodedString.length() == 0) { + this.fields.reset(fields); + } + try { + BitString bitString = decodeBitString(encodedString); + this.fields.decode(bitString); + } catch (Exception e) { + throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); + } + } + + protected BitString decodeBitString(CharSequence encodedString) { + return base64UrlEncoder.decode(encodedString); + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 3ac48afd..7501e7b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -1,55 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.HeaderV1; -public final class HeaderV1CoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class HeaderV1CoreSegment extends AbstractBase64Segment { public HeaderV1CoreSegment() { - super(); - } - - public HeaderV1CoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); + super(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(HeaderV1Field.ID, new EncodableFixedInteger(6, HeaderV1.ID)); fields.put(HeaderV1Field.VERSION, new EncodableFixedInteger(6, HeaderV1.VERSION)); fields.put(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange()); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode HeaderV1CoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 5d16c84b..595d7a8f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.segment; import java.time.Instant; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -12,30 +9,15 @@ import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedString; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.section.TcfCaV1; -public final class TcfCaV1CoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class TcfCaV1CoreSegment extends AbstractBase64Segment { public TcfCaV1CoreSegment() { - super(); - } - - public TcfCaV1CoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { + super(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); // NOTE: TcfCaV1.setFieldValue records modifications Instant date = Instant.EPOCH; - - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); fields.put(TcfCaV1Field.CREATED, new EncodableDatetime(date)); fields.put(TcfCaV1Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -52,25 +34,6 @@ protected EncodableBitStringFields initializeFields() { fields.put(TcfCaV1Field.VENDOR_EXPRESS_CONSENT, new EncodableOptimizedFixedRange()); fields.put(TcfCaV1Field.VENDOR_IMPLIED_CONSENT, new EncodableOptimizedFixedRange()); fields.put(TcfCaV1Field.PUB_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfCaV1CoreSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 6c30191a..56a956bd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -1,52 +1,16 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public final class TcfCaV1DisclosedVendorsSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class TcfCaV1DisclosedVendorsSegment extends AbstractBase64Segment { public TcfCaV1DisclosedVendorsSegment() { - super(); - } - - public TcfCaV1DisclosedVendorsSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); + super(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange()); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfCaV1DisclosedVendorsSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index fbda3a87..7b35a53a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -1,33 +1,16 @@ package com.iab.gpp.encoder.segment; import java.util.function.IntSupplier; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfCaV1Field; -public final class TcfCaV1PublisherPurposesSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class TcfCaV1PublisherPurposesSegment extends AbstractBase64Segment { public TcfCaV1PublisherPurposesSegment() { - super(); - } - - public TcfCaV1PublisherPurposesSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); + super(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); fields.put(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); @@ -49,25 +32,6 @@ public int getAsInt() { fields.put(TcfCaV1Field.CUSTOM_PURPOSES_IMPLIED_CONSENT, new EncodableFlexibleBitfield(getLengthSupplier)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfCaV1PublisherPurposesSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 5ff3698f..c4c9d1a2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.segment; import java.time.Instant; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -12,30 +9,16 @@ import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedString; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.section.TcfEuV2; -public final class TcfEuV2CoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); +public final class TcfEuV2CoreSegment extends AbstractBase64Segment { public TcfEuV2CoreSegment() { - super(); - } - - public TcfEuV2CoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { + super(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); // NOTE: TcfEuV2.setFieldValue records modifications Instant date = Instant.EPOCH; - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); fields.put(TcfEuV2Field.VERSION, new EncodableFixedInteger(6, TcfEuV2.VERSION)); fields.put(TcfEuV2Field.CREATED, new EncodableDatetime(date)); fields.put(TcfEuV2Field.LAST_UPDATED, new EncodableDatetime(date)); @@ -56,25 +39,6 @@ protected EncodableBitStringFields initializeFields() { fields.put(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS, new EncodableOptimizedFixedRange()); fields.put(TcfEuV2Field.PUBLISHER_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfEuV2CoreSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index 1c547c73..bc7ef3a7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -1,33 +1,16 @@ package com.iab.gpp.encoder.segment; import java.util.function.IntSupplier; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2PublisherPurposesSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); +public final class TcfEuV2PublisherPurposesSegment extends AbstractBase64Segment { public TcfEuV2PublisherPurposesSegment() { - super(); - } - - public TcfEuV2PublisherPurposesSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); + super(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); fields.put(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); fields.put(TcfEuV2Field.PUBLISHER_CONSENTS, new EncodableFixedBitfield(24)); fields.put(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); @@ -49,25 +32,6 @@ public int getAsInt() { fields.put(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS, new EncodableFlexibleBitfield(getLengthSupplier)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfEuV2PublisherPurposesSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index 0c8b721b..b7b4e40d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -1,52 +1,16 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2VendorsAllowedSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); +public final class TcfEuV2VendorsAllowedSegment extends AbstractBase64Segment { public TcfEuV2VendorsAllowedSegment() { - super(); - } - - public TcfEuV2VendorsAllowedSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); + super(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); fields.put(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, new EncodableFixedInteger(3, 2)); fields.put(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange()); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfEuV2VendorsAllowedSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 15296c92..0da9fc2d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -1,52 +1,16 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.TcfEuV2Field; -public final class TcfEuV2VendorsDisclosedSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = TraditionalBase64UrlEncoder.getInstance(); +public final class TcfEuV2VendorsDisclosedSegment extends AbstractBase64Segment { public TcfEuV2VendorsDisclosedSegment() { - super(); - } - - public TcfEuV2VendorsDisclosedSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); + super(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); fields.put(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); fields.put(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange()); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode TcfEuV2VendorsDisclosedSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 2c54f993..1375c6cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCaField; import com.iab.gpp.encoder.section.UsCa; -public final class UsCaCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCaCoreSegment extends AbstractBase64Segment { public UsCaCoreSegment() { - super(); - } - - public UsCaCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); + super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); fields.put(UsCaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 6510708f..9dfbfb8c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCaField; -public final class UsCaGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCaGpcSegment extends AbstractBase64Segment { public UsCaGpcSegment() { - super(); - } - - public UsCaGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); + super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCaField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCaGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 86a85d74..e98f50eb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCoField; import com.iab.gpp.encoder.section.UsCo; -public final class UsCoCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCoCoreSegment extends AbstractBase64Segment { public UsCoCoreSegment() { - super(); - } - - public UsCoCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); + super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); fields.put(UsCoField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -48,26 +31,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCoField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCoCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 587036e8..1da25138 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCoField; -public final class UsCoGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCoGpcSegment extends AbstractBase64Segment { public UsCoGpcSegment() { - super(); - } - - public UsCoGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); + super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCoField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCoGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index bacd8f06..707ffc68 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCtField; import com.iab.gpp.encoder.section.UsCt; -public final class UsCtCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCtCoreSegment extends AbstractBase64Segment { public UsCtCoreSegment() { - super(); - } - - public UsCtCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); + super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); fields.put(UsCtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -49,26 +32,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsCtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCtCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index 9caefcce..da0aa637 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsCtField; -public final class UsCtGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsCtGpcSegment extends AbstractBase64Segment { public UsCtGpcSegment() { - super(); - } - - public UsCtGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); + super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsCtField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsCtGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index e1f3ff2b..e4f2c9c7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsDeField; import com.iab.gpp.encoder.section.UsDe; -public final class UsDeCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsDeCoreSegment extends AbstractBase64Segment { public UsDeCoreSegment() { - super(); - } - - public UsDeCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); + super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); fields.put(UsDeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -52,26 +35,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsDeField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsDeCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index bc7338f6..628f0c21 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsDeField; -public final class UsDeGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsDeGpcSegment extends AbstractBase64Segment { public UsDeGpcSegment() { - super(); - } - - public UsDeGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); + super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsDeField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsDeGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 61dfb5af..366cf2d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.section.UsFl; -public final class UsFlCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsFlCoreSegment extends AbstractBase64Segment { public UsFlCoreSegment() { - super(); - } - - public UsFlCoreSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); + super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); fields.put(UsFlField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,25 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsFlField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsFlCoreSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 7432a589..9f5bb0a3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsIaField; import com.iab.gpp.encoder.section.UsIa; -public final class UsIaCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsIaCoreSegment extends AbstractBase64Segment { public UsIaCoreSegment() { - super(); - } - - public UsIaCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); + super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); fields.put(UsIaField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsIaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsIaCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 59695f80..5c5deb06 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsIaField; -public final class UsIaGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsIaGpcSegment extends AbstractBase64Segment { public UsIaGpcSegment() { - super(); - } - - public UsIaGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); + super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsIaField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsIaGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 85858c49..72d52b8a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsMtField; import com.iab.gpp.encoder.section.UsMt; -public final class UsMtCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsMtCoreSegment extends AbstractBase64Segment { public UsMtCoreSegment() { - super(); - } - - public UsMtCoreSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); + super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); fields.put(UsMtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsMtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsMtCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 086243a6..2d079e14 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsMtField; -public final class UsMtGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsMtGpcSegment extends AbstractBase64Segment { public UsMtGpcSegment() { - super(); - } - - public UsMtGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); + super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsMtField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsMtGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index f70f479b..90a58bb4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,32 +1,17 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNatField; import com.iab.gpp.encoder.section.UsNat; -public final class UsNatCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNatCoreSegment extends AbstractBase64Segment { public UsNatCoreSegment() { - super(); - } - - public UsNatCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); + super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); fields.put(UsNatField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -59,41 +44,25 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNatField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; } @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - - // Necessary to maintain backwards compatibility when sensitive data processing changed from a - // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the - // DE, IA, NE, NH, NJ, TN release - if (bitString.length() == 66) { - BitStringBuilder builder = new BitStringBuilder(); - - builder.append(bitString, 0, 48); - builder.extend(8); - builder.append(bitString, 48, 52); - builder.extend(2); - builder.append(bitString, 52, 62); - bitString = builder.build(); - } - - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNatCoreSegment '" + encodedString + "'", e); + protected BitString decodeBitString(CharSequence encodedString) { + BitString bitString = super.decodeBitString(encodedString); + // Necessary to maintain backwards compatibility when sensitive data processing changed from a + // length of 12 to 16 and known child sensitive data consents changed from a length of 2 to 3 in the + // DE, IA, NE, NH, NJ, TN release + if (bitString.length() == 66) { + BitStringBuilder builder = new BitStringBuilder(); + + builder.append(bitString, 0, 48); + builder.extend(8); + builder.append(bitString, 48, 52); + builder.extend(2); + builder.append(bitString, 52, 62); + bitString = builder.build(); } + return bitString; } - + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 07319157..d2eb4207 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNatField; -public final class UsNatGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNatGpcSegment extends AbstractBase64Segment { public UsNatGpcSegment() { - super(); - } - - public UsNatGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); + super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNatField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNatGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index f3d6462a..51c18681 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNeField; import com.iab.gpp.encoder.section.UsNe; -public final class UsNeCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNeCoreSegment extends AbstractBase64Segment { public UsNeCoreSegment() { - super(); - } - - public UsNeCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); + super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); fields.put(UsNeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNeField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNeCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 36b80634..8353380b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNeField; -public final class UsNeGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNeGpcSegment extends AbstractBase64Segment { public UsNeGpcSegment() { - super(); - } - - public UsNeGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); + super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNeField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNeGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 5940fcba..7819025b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNhField; import com.iab.gpp.encoder.section.UsNh; -public final class UsNhCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNhCoreSegment extends AbstractBase64Segment { public UsNhCoreSegment() { - super(); - } - - public UsNhCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); + super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); fields.put(UsNhField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNhField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNhCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 569d52d1..75682713 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNhField; -public final class UsNhGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNhGpcSegment extends AbstractBase64Segment { public UsNhGpcSegment() { - super(); - } - - public UsNhGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); + super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNhField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNhGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 14ad705e..566831fb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNjField; import com.iab.gpp.encoder.section.UsNj; -public final class UsNjCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNjCoreSegment extends AbstractBase64Segment { public UsNjCoreSegment() { - super(); - } - - public UsNjCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); + super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); fields.put(UsNjField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsNjField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNjCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 611b97c2..e00f54c1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsNjField; -public final class UsNjGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsNjGpcSegment extends AbstractBase64Segment { public UsNjGpcSegment() { - super(); - } - - public UsNjGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); + super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsNjField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsNjGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index 9a66f0f9..ee928561 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsOrField; import com.iab.gpp.encoder.section.UsOr; -public final class UsOrCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsOrCoreSegment extends AbstractBase64Segment { public UsOrCoreSegment() { - super(); - } - - public UsOrCoreSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); + super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); fields.put(UsOrField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsOrField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsOrCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 72e33543..46a889a8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsOrField; -public final class UsOrGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsOrGpcSegment extends AbstractBase64Segment { public UsOrGpcSegment() { - super(); - } - - public UsOrGpcSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); + super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsOrField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsOrGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index dbd4ad61..f031154d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTnField; import com.iab.gpp.encoder.section.UsTn; -public final class UsTnCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsTnCoreSegment extends AbstractBase64Segment { public UsTnCoreSegment() { - super(); - } - - public UsTnCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); + super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); fields.put(UsTnField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsTnField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsTnCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index a0e320fe..c2ad6387 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -1,54 +1,18 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTnField; -public final class UsTnGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsTnGpcSegment extends AbstractBase64Segment { public UsTnGpcSegment() { - super(); - } - - public UsTnGpcSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); + super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTnField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); } - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsTnGpcSegment '" + encodedString + "'", e); - } - } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 7489d79c..7e4b7b5d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTxField; import com.iab.gpp.encoder.section.UsTx; -public final class UsTxCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsTxCoreSegment extends AbstractBase64Segment { public UsTxCoreSegment() { - super(); - } - - public UsTxCoreSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); + super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); fields.put(UsTxField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsTxField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsTxCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index c0453c74..a526f28a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -1,54 +1,17 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsTxField; -public final class UsTxGpcSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsTxGpcSegment extends AbstractBase64Segment { public UsTxGpcSegment() { - super(); - } - - public UsTxGpcSegment(CharSequence encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); + super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); fields.put(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); fields.put(UsTxField.GPC, new EncodableBoolean(false)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if(encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsTxGpcSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 6cc20375..1fb16fb5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.section.UsUt; -public final class UsUtCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsUtCoreSegment extends AbstractBase64Segment { public UsUtCoreSegment() { - super(); - } - - public UsUtCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); + super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); fields.put(UsUtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -51,26 +34,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsUtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsUtCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index b9a1a49a..159532f5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -1,32 +1,15 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; -import com.iab.gpp.encoder.bitstring.BitString; -import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.section.UsVa; -public final class UsVaCoreSegment extends AbstractLazilyEncodableSegment> { - - private static final AbstractBase64UrlEncoder base64UrlEncoder = CompressedBase64UrlEncoder.getInstance(); +public final class UsVaCoreSegment extends AbstractBase64Segment { public UsVaCoreSegment() { - super(); - } - - public UsVaCoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected EncodableBitStringFields initializeFields() { - EncodableBitStringFields fields = new EncodableBitStringFields<>(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); + super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); fields.put(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); fields.put(UsVaField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); @@ -49,26 +32,6 @@ protected EncodableBitStringFields initializeFields() { new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); fields.put(UsVaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - return fields; - } - - @Override - protected StringBuilder encodeSegment(EncodableBitStringFields fields) { - BitStringBuilder bitString = fields.encode(); - return base64UrlEncoder.encode(bitString); - } - - @Override - protected void decodeSegment(CharSequence encodedString, EncodableBitStringFields fields) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } - try { - BitString bitString = base64UrlEncoder.decode(encodedString); - this.fields.decode(bitString); - } catch (Exception e) { - throw new DecodingException("Unable to decode UsVaCoreSegment '" + encodedString + "'", e); - } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 089147d6..2acfcd47 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -1,35 +1,24 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.UnencodableCharacter; import com.iab.gpp.encoder.datatype.UnencodableInteger; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.GenericFields; import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.section.UspV1; -public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment> { +public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment> { public UspV1CoreSegment() { - super(); - } - - public UspV1CoreSegment(String encodedString) { - super(); - this.decode(encodedString); - } - - @Override - protected GenericFields initializeFields() { - GenericFields fields = new GenericFields<>(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); + super(UspV1Field.USPV1_CORE_SEGMENT_FIELD_NAMES); fields.put(UspV1Field.VERSION, new UnencodableInteger(UspV1.VERSION)); fields.put(UspV1Field.NOTICE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); fields.put(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); fields.put(UspV1Field.LSPA_COVERED, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); - return fields; } @Override - protected StringBuilder encodeSegment(GenericFields fields) { + protected StringBuilder encodeSegment() { StringBuilder str = new StringBuilder(); str.append(fields.get(UspV1Field.VERSION).getValue()); str.append(fields.get(UspV1Field.NOTICE).getValue()); @@ -39,7 +28,7 @@ protected StringBuilder encodeSegment(GenericFields fields) { } @Override - protected void decodeSegment(CharSequence encodedString, GenericFields fields) { + protected void decodeSegment(CharSequence encodedString) { if (encodedString == null || encodedString.length() != 4) { throw new DecodingException("Invalid uspv1 string: '" + encodedString + "'"); } From 269e8a59dcd172a02bff39404fa30302bd2c0ecf Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 21:19:22 -0500 Subject: [PATCH 23/49] move --- .../gpp/encoder/field/EncodableBitStringFields.java | 11 ----------- .../iab/gpp/encoder/{section => field}/FieldKey.java | 2 +- .../java/com/iab/gpp/encoder/field/GenericFields.java | 11 ----------- .../java/com/iab/gpp/encoder/field/HeaderV1Field.java | 2 -- .../java/com/iab/gpp/encoder/field/TcfCaV1Field.java | 2 -- .../java/com/iab/gpp/encoder/field/TcfEuV2Field.java | 2 -- .../java/com/iab/gpp/encoder/field/UsCaField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsCoField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsCtField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsDeField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsFlField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsIaField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsMtField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsNatField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsNeField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsNhField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsNjField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsOrField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsTnField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsTxField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsUtField.java | 2 -- .../java/com/iab/gpp/encoder/field/UsVaField.java | 2 -- .../java/com/iab/gpp/encoder/field/UspV1Field.java | 2 -- .../com/iab/gpp/encoder/section/EncodableSection.java | 2 ++ .../gpp/encoder/segment/AbstractBase64Segment.java | 2 +- .../com/iab/gpp/encoder/segment/EncodableSegment.java | 2 +- 26 files changed, 5 insertions(+), 65 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/{section => field}/FieldKey.java (58%) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java deleted file mode 100644 index e90c6f2e..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/EncodableBitStringFields.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.field; - -import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; - -public final class EncodableBitStringFields extends Fields> { - - public EncodableBitStringFields(FieldNames fieldNames) { - super(fieldNames); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java similarity index 58% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java index 83c4aaa9..c425bd6d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/FieldKey.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldKey.java @@ -1,4 +1,4 @@ -package com.iab.gpp.encoder.section; +package com.iab.gpp.encoder.field; public interface FieldKey { String getName(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java deleted file mode 100644 index c644f333..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/GenericFields.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.iab.gpp.encoder.field; - -import com.iab.gpp.encoder.datatype.DataType; - -public final class GenericFields extends Fields> { - - public GenericFields(FieldNames fieldNames) { - super(fieldNames); - } - -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 70a7170a..1dce80ad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum HeaderV1Field implements FieldKey { ID("Id"), VERSION("Version"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 8c63da89..15846312 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum TcfCaV1Field implements FieldKey { VERSION("Version"), CREATED("Created"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 7dc29f92..1b3062aa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum TcfEuV2Field implements FieldKey { VERSION("Version"), CREATED("Created"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index 4279c41c..b44d9886 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsCaField implements FieldKey { VERSION("Version"), SALE_OPT_OUT_NOTICE("SaleOptOutNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 00f1c36c..84cef9ee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsCoField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index abcb9aad..6fd70aa0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsCtField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 7670bacf..048f6ac5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsDeField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 04ace53b..0b3a0278 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsFlField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index 5defbe4f..0073531a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsIaField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index ccdbfa98..669e00bc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsMtField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index c51b9652..7dc74c52 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsNatField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index 1b57a1c6..b14e5d79 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsNeField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 4b0016b7..2a47ee7f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsNhField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index a1282d17..23ef1e87 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsNjField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index 3c131c4e..de538b56 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsOrField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 5879e7df..110e8f1c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsTnField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index 63f4ec18..d3b341c4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsTxField implements FieldKey { VERSION("Version"), PROCESSING_NOTICE("ProcessingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 6d65cb51..50eba2b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsUtField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 64b5fe6f..59880c65 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UsVaField implements FieldKey { VERSION("Version"), SHARING_NOTICE("SharingNotice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index c75ba981..b0e73173 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -1,7 +1,5 @@ package com.iab.gpp.encoder.field; -import com.iab.gpp.encoder.section.FieldKey; - public enum UspV1Field implements FieldKey { VERSION("Version"), NOTICE("Notice"), diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 2e12e2d5..a87414aa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,5 +1,7 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.field.FieldKey; + public interface EncodableSection & FieldKey> { int getId(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 270686d0..5a911351 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -6,9 +6,9 @@ import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.EncodableBitStringFields; +import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; import com.iab.gpp.encoder.field.UsCaField; -import com.iab.gpp.encoder.section.FieldKey; public abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 15c529d7..ae6256b8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,6 +1,6 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.section.FieldKey; +import com.iab.gpp.encoder.field.FieldKey; public interface EncodableSegment & FieldKey> { From 61524c49116d86eff409e7766b6f9446552af280 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 20 Jan 2026 22:11:29 -0500 Subject: [PATCH 24/49] dry --- .../java/com/iab/gpp/encoder/GppModel.java | 49 +++++--- .../encoder/bitstring/BitStringEncoder.java | 52 --------- .../com/iab/gpp/encoder/field/FieldNames.java | 47 ++++---- .../com/iab/gpp/encoder/field/Fields.java | 71 ------------ .../iab/gpp/encoder/field/HeaderV1Field.java | 2 +- .../iab/gpp/encoder/field/TcfCaV1Field.java | 6 +- .../iab/gpp/encoder/field/TcfEuV2Field.java | 8 +- .../com/iab/gpp/encoder/field/UsCaField.java | 4 +- .../com/iab/gpp/encoder/field/UsCoField.java | 4 +- .../com/iab/gpp/encoder/field/UsCtField.java | 4 +- .../com/iab/gpp/encoder/field/UsDeField.java | 4 +- .../com/iab/gpp/encoder/field/UsFlField.java | 2 +- .../com/iab/gpp/encoder/field/UsIaField.java | 4 +- .../com/iab/gpp/encoder/field/UsMtField.java | 4 +- .../com/iab/gpp/encoder/field/UsNatField.java | 4 +- .../com/iab/gpp/encoder/field/UsNeField.java | 4 +- .../com/iab/gpp/encoder/field/UsNhField.java | 4 +- .../com/iab/gpp/encoder/field/UsNjField.java | 4 +- .../com/iab/gpp/encoder/field/UsOrField.java | 4 +- .../com/iab/gpp/encoder/field/UsTnField.java | 4 +- .../com/iab/gpp/encoder/field/UsTxField.java | 4 +- .../com/iab/gpp/encoder/field/UsUtField.java | 2 +- .../com/iab/gpp/encoder/field/UsVaField.java | 2 +- .../com/iab/gpp/encoder/field/UspV1Field.java | 2 +- .../AbstractLazilyEncodableSection.java | 75 +++++++++++-- .../gpp/encoder/section/EncodableSection.java | 26 ++--- .../com/iab/gpp/encoder/section/UsCa.java | 2 +- .../segment/AbstractBase64Segment.java | 38 +++++-- .../AbstractLazilyEncodableSegment.java | 105 ++++++++++++++---- .../gpp/encoder/segment/EncodableSegment.java | 18 +-- .../encoder/segment/HeaderV1CoreSegment.java | 6 +- .../encoder/segment/TcfCaV1CoreSegment.java | 32 +++--- .../TcfCaV1DisclosedVendorsSegment.java | 4 +- .../TcfCaV1PublisherPurposesSegment.java | 12 +- .../encoder/segment/TcfEuV2CoreSegment.java | 38 +++---- .../TcfEuV2PublisherPurposesSegment.java | 12 +- .../segment/TcfEuV2VendorsAllowedSegment.java | 4 +- .../TcfEuV2VendorsDisclosedSegment.java | 4 +- .../gpp/encoder/segment/UsCaCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsCaGpcSegment.java | 6 +- .../gpp/encoder/segment/UsCoCoreSegment.java | 22 ++-- .../gpp/encoder/segment/UsCoGpcSegment.java | 6 +- .../gpp/encoder/segment/UsCtCoreSegment.java | 22 ++-- .../gpp/encoder/segment/UsCtGpcSegment.java | 6 +- .../gpp/encoder/segment/UsDeCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsDeGpcSegment.java | 6 +- .../gpp/encoder/segment/UsFlCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsIaCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsIaGpcSegment.java | 6 +- .../gpp/encoder/segment/UsMtCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsMtGpcSegment.java | 6 +- .../gpp/encoder/segment/UsNatCoreSegment.java | 32 +++--- .../gpp/encoder/segment/UsNatGpcSegment.java | 6 +- .../gpp/encoder/segment/UsNeCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsNeGpcSegment.java | 6 +- .../gpp/encoder/segment/UsNhCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsNhGpcSegment.java | 6 +- .../gpp/encoder/segment/UsNjCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsNjGpcSegment.java | 6 +- .../gpp/encoder/segment/UsOrCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsOrGpcSegment.java | 6 +- .../gpp/encoder/segment/UsTnCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsTnGpcSegment.java | 6 +- .../gpp/encoder/segment/UsTxCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsTxGpcSegment.java | 6 +- .../gpp/encoder/segment/UsUtCoreSegment.java | 24 ++-- .../gpp/encoder/segment/UsVaCoreSegment.java | 22 ++-- .../gpp/encoder/segment/UspV1CoreSegment.java | 24 ++-- 68 files changed, 599 insertions(+), 560 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 8c8bb223..5e3b4bca 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.EncodableSection; import com.iab.gpp.encoder.section.HeaderV1; @@ -35,7 +36,7 @@ import com.iab.gpp.encoder.section.UspV1; public class GppModel { - private Map sections = new HashMap<>(); + private Map> sections = new HashMap<>(); private String encodedString; @@ -50,12 +51,16 @@ public GppModel(String encodedString) { decode(encodedString); } + public void setFieldValue(int sectionId, FieldKey fieldName, Object value) { + setFieldValue(sectionId, fieldName.getName(), value); + } + public void setFieldValue(int sectionId, String fieldName, Object value) { setFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName, value); } - private EncodableSection getOrCreateSection(String sectionName) { - EncodableSection section = this.sections.get(sectionName); + private EncodableSection getOrCreateSection(String sectionName) { + EncodableSection section = this.sections.get(sectionName); if (section == null) { switch(sectionName) { case TcfEuV2.NAME: @@ -123,13 +128,17 @@ private EncodableSection getOrCreateSection(String sectionName) { return section; } + public void setFieldValue(String sectionName, FieldKey fieldName, Object value) { + setFieldValue(sectionName, fieldName.getName(), value); + } + public void setFieldValue(String sectionName, String fieldName, Object value) { if (!this.decoded) { this.sections = this.decodeModel(this.encodedString); this.dirty = false; this.decoded = true; } - EncodableSection section = getOrCreateSection(sectionName); + EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.setFieldValue(fieldName, value); this.dirty = true; @@ -138,17 +147,25 @@ public void setFieldValue(String sectionName, String fieldName, Object value) { } } + public Object getFieldValue(int sectionId, FieldKey fieldName) { + return getFieldValue(sectionId, fieldName.getName()); + } + public Object getFieldValue(int sectionId, String fieldName) { return getFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); } + public Object getFieldValue(String sectionName, FieldKey fieldName) { + return getFieldValue(sectionName, fieldName.getName()); + } + public Object getFieldValue(String sectionName, String fieldName) { if (!this.decoded) { this.sections = this.decodeModel(this.encodedString); this.dirty = false; this.decoded = true; } - EncodableSection field = this.sections.get(sectionName); + EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.getFieldValue(fieldName); } else { @@ -166,7 +183,7 @@ public boolean hasField(String sectionName, String fieldName) { this.dirty = false; this.decoded = true; } - EncodableSection field = this.sections.get(sectionName); + EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.hasField(fieldName); } else { @@ -204,11 +221,11 @@ public HeaderV1 getHeader() { return header; } - public EncodableSection getSection(int sectionId) { + public EncodableSection getSection(int sectionId) { return getSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); } - public EncodableSection getSection(String sectionName) { + public EncodableSection getSection(String sectionName) { if (!this.decoded) { this.sections = this.decodeModel(this.encodedString); this.dirty = false; @@ -325,7 +342,7 @@ public List getSectionIds() { List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = this.sections.get(sectionName); + EncodableSection section = this.sections.get(sectionName); if (section != null) { sectionIds.add(section.getId()); } @@ -333,13 +350,13 @@ public List getSectionIds() { return sectionIds; } - protected String encodeModel(Map sections) { + protected String encodeModel(Map> sections) { int length = Sections.SECTION_ORDER.size(); List encodedSections = new ArrayList<>(length); List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = sections.get(sectionName); + EncodableSection section = sections.get(sectionName); if (section != null) { encodedSections.add(section.encodeCharSequence()); sectionIds.add(section.getId()); @@ -356,9 +373,9 @@ protected String encodeModel(Map sections) { return SlicedCharSequence.join('~', encodedSections).toString(); } - protected Map decodeModel(String str) { + protected Map> decodeModel(String str) { if (str == null || str.isEmpty() || str.startsWith("DB")) { - Map sections = new HashMap<>(); + Map> sections = new HashMap<>(); if(str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); @@ -434,7 +451,7 @@ protected Map decodeModel(String str) { return sections; } else if (str.startsWith("C")) { // old tcfeu only string - Map sections = new HashMap<>(); + Map> sections = new HashMap<>(); TcfEuV2 section = new TcfEuV2(str); sections.put(TcfEuV2.NAME, section); @@ -459,7 +476,7 @@ public String encodeSection(String sectionName) { this.dirty = false; this.decoded = true; } - EncodableSection section = this.sections.get(sectionName); + EncodableSection section = this.sections.get(sectionName); if (section != null) { return section.encode(); } else { @@ -478,7 +495,7 @@ public void decodeSection(String sectionName, String encodedString) { this.decoded = true; } - EncodableSection section = getOrCreateSection(sectionName); + EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.decode(encodedString); this.dirty = true; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java deleted file mode 100644 index 437bb046..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitStringEncoder.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.iab.gpp.encoder.bitstring; - -import java.util.List; -import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; -import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; - -public final class BitStringEncoder { - - private static final BitStringEncoder instance = new BitStringEncoder(); - - private BitStringEncoder() { - - } - - public static BitStringEncoder getInstance() { - return instance; - } - - public BitStringBuilder encode(EncodableBitStringFields fields) { - BitStringBuilder bitString = new BitStringBuilder(); - List fieldNames = fields.getNames(); - for (int i = 0; i < fieldNames.size(); i++) { - AbstractEncodableBitStringDataType field = fields.get(i); - if (field != null) { - field.encode(bitString); - } else { - throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); - } - } - - return bitString; - } - - public void decode(BitString bitString, EncodableBitStringFields fields) { - List fieldNames = fields.getNames(); - BitStringReader reader = new BitStringReader(bitString); - for (int i = 0; i < fieldNames.size(); i++) { - AbstractEncodableBitStringDataType field = fields.get(i); - if (field != null) { - try { - field.decode(reader); - } catch (Exception e) { - throw new DecodingException("Unable to decode " + fieldNames.get(i), e); - } - } else { - throw new DecodingException("Field not found: '" + fieldNames.get(i) + "'"); - } - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index b62037e6..960d1829 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -1,36 +1,41 @@ package com.iab.gpp.encoder.field; -import java.util.Arrays; -import java.util.Collections; import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -public final class FieldNames { +public final class FieldNames & FieldKey> { - private final List list; - private final Map map; + private final E[] keys; + private final LinkedHashMap map; + private final Integer[] indices; - FieldNames(String... names) { - this.list = Collections.unmodifiableList(Arrays.asList(names)); + @SafeVarargs + FieldNames(E... keys) { + this.keys = keys; this.map = new LinkedHashMap<>(); - for (int i = 0; i < names.length; i++) { - this.map.put(names[i], i); + this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; + for (int i = 0; i < keys.length; i++) { + E key = keys[i]; + this.map.put(key.getName(), key); + this.indices[key.ordinal()] = i; } } - - public boolean contains(String name) { - return map.containsKey(name); + + public int size() { + return keys.length; } - - static final FieldNames of(String... names) { - return new FieldNames(names); + + public E get(int i) { + return keys[i]; } - - public List getNames() { - return list; + + public Integer getIndex(E key) { + if (key == null) { + return null; + } + return indices[key.ordinal()]; } - public Integer convertKey(String key) { + + public E convertKey(String key) { return map.get(key); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java deleted file mode 100644 index 107b5138..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/Fields.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.iab.gpp.encoder.field; - -import java.util.List; -import com.iab.gpp.encoder.datatype.DataType; - -public abstract class Fields> { - - private final FieldNames fieldNames; - private final Object[] values; - - protected Fields(FieldNames fieldNames) { - this.fieldNames = fieldNames; - this.values = new Object[fieldNames.getNames().size()]; - } - - public List getNames() { - return fieldNames.getNames(); - } - - public boolean containsKey(String key) { - Integer index = fieldNames.convertKey(key); - return index != null && values[index] != null; - } - - public void put(String key, T value) { - Integer index = fieldNames.convertKey(key); - if (index != null) { - values[index] = value; - } - } - - @SuppressWarnings("unchecked") - public T get(int index) { - return (T) values[index]; - } - - public T get(String key) { - Integer index = fieldNames.convertKey(key); - if (index != null) { - return get(index); - } - return null; - } - - public void reset(Fields fields) { - for (String name : fieldNames.getNames()) { - put(name, fields.get(name)); - } - } - - public boolean isDirty() { - int size = getNames().size(); - for (int i = 0; i < size; i++) { - T value = get(i); - if (value != null && value.isDirty()) { - return true; - } - } - return false; - } - - public void markClean() { - int size = getNames().size(); - for (int i = 0; i < size; i++) { - T value = get(i); - if (value != null) { - value.setDirty(false); - } - } - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java index 1dce80ad..91066c76 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/HeaderV1Field.java @@ -17,7 +17,7 @@ public String getName() { } //@formatter:off - public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames HEADER_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( HeaderV1Field.ID, HeaderV1Field.VERSION, HeaderV1Field.SECTION_IDS diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java index 15846312..6fbe5960 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfCaV1Field.java @@ -40,7 +40,7 @@ public String getName() { } //@formatter:off - public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.VERSION, TcfCaV1Field.CREATED, TcfCaV1Field.LAST_UPDATED, @@ -61,7 +61,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, @@ -72,7 +72,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, TcfCaV1Field.DISCLOSED_VENDORS ); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java index 1b3062aa..5150a6db 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/TcfEuV2Field.java @@ -43,7 +43,7 @@ public String getName() { } //@formatter:off - public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VERSION, TcfEuV2Field.CREATED, TcfEuV2Field.LAST_UPDATED, @@ -67,7 +67,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, TcfEuV2Field.PUBLISHER_CONSENTS, TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, @@ -78,14 +78,14 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_ALLOWED ); //@formatter:on //@formatter:off - public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES = new FieldNames<>( TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, TcfEuV2Field.VENDORS_DISCLOSED ); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java index b44d9886..2dd3a51c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCaField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCaField.VERSION, UsCaField.SALE_OPT_OUT_NOTICE, UsCaField.SHARING_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCaField.GPC_SEGMENT_TYPE, UsCaField.GPC_SEGMENT_INCLUDED, UsCaField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java index 84cef9ee..a2366deb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCoField.java @@ -29,7 +29,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCO_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCoField.VERSION, UsCoField.SHARING_NOTICE, UsCoField.SALE_OPT_OUT_NOTICE, @@ -45,7 +45,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCO_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCoField.GPC_SEGMENT_TYPE, UsCoField.GPC_SEGMENT_INCLUDED, UsCoField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java index 6fd70aa0..dd605815 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsCtField.java @@ -29,7 +29,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCtField.VERSION, UsCtField.SHARING_NOTICE, UsCtField.SALE_OPT_OUT_NOTICE, @@ -45,7 +45,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USCT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsCtField.GPC_SEGMENT_TYPE, UsCtField.GPC_SEGMENT_INCLUDED, UsCtField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java index 048f6ac5..e8fe98b2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsDeField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USDE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsDeField.VERSION, UsDeField.PROCESSING_NOTICE, UsDeField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USDE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsDeField.GPC_SEGMENT_TYPE, UsDeField.GPC_SEGMENT_INCLUDED, UsDeField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java index 0b3a0278..170e7ff9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsFlField.java @@ -26,7 +26,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USFL_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsFlField.VERSION, UsFlField.PROCESSING_NOTICE, UsFlField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java index 0073531a..3b3bb7cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsIaField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USIA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsIaField.VERSION, UsIaField.PROCESSING_NOTICE, UsIaField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USIA_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsIaField.GPC_SEGMENT_TYPE, UsIaField.GPC_SEGMENT_INCLUDED, UsIaField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java index 669e00bc..07694812 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsMtField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USMT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsMtField.VERSION, UsMtField.SHARING_NOTICE, UsMtField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static FieldNames USMT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsMtField.GPC_SEGMENT_TYPE, UsMtField.GPC_SEGMENT_INCLUDED, UsMtField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java index 7dc74c52..de9c3822 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNatField.java @@ -34,7 +34,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNAT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.VERSION, UsNatField.SHARING_NOTICE, UsNatField.SALE_OPT_OUT_NOTICE, @@ -55,7 +55,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNAT_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNatField.GPC_SEGMENT_TYPE, UsNatField.GPC_SEGMENT_INCLUDED, UsNatField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java index b14e5d79..a556270d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNeField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNE_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNeField.VERSION, UsNeField.PROCESSING_NOTICE, UsNeField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNE_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNeField.GPC_SEGMENT_TYPE, UsNeField.GPC_SEGMENT_INCLUDED, UsNeField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java index 2a47ee7f..7247c62e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNhField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNH_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNhField.VERSION, UsNhField.PROCESSING_NOTICE, UsNhField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNH_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNhField.GPC_SEGMENT_TYPE, UsNhField.GPC_SEGMENT_INCLUDED, UsNhField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java index 23ef1e87..d47d15b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsNjField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNJ_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNjField.VERSION, UsNjField.PROCESSING_NOTICE, UsNjField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USNJ_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsNjField.GPC_SEGMENT_TYPE, UsNjField.GPC_SEGMENT_INCLUDED, UsNjField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java index de538b56..f2faafa2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsOrField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USOR_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsOrField.VERSION, UsOrField.PROCESSING_NOTICE, UsOrField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USOR_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsOrField.GPC_SEGMENT_TYPE, UsOrField.GPC_SEGMENT_INCLUDED, UsOrField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java index 110e8f1c..09477e53 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTnField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTN_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTnField.VERSION, UsTnField.PROCESSING_NOTICE, UsTnField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTN_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTnField.GPC_SEGMENT_TYPE, UsTnField.GPC_SEGMENT_INCLUDED, UsTnField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java index d3b341c4..f441fe3b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsTxField.java @@ -30,7 +30,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USTX_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTxField.VERSION, UsTxField.PROCESSING_NOTICE, UsTxField.SALE_OPT_OUT_NOTICE, @@ -47,7 +47,7 @@ public String getName() { //@formatter:on //@formatter:off - public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = FieldNames.of( + public static FieldNames USTX_GPC_SEGMENT_FIELD_NAMES = new FieldNames<>( UsTxField.GPC_SEGMENT_TYPE, UsTxField.GPC_SEGMENT_INCLUDED, UsTxField.GPC diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java index 50eba2b8..3f7c3ab3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsUtField.java @@ -26,7 +26,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USUT_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsUtField.VERSION, UsUtField.SHARING_NOTICE, UsUtField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java index 59880c65..b6c1fd59 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UsVaField.java @@ -25,7 +25,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USVA_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UsVaField.VERSION, UsVaField.SHARING_NOTICE, UsVaField.SALE_OPT_OUT_NOTICE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java index b0e73173..d7a9a96c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/UspV1Field.java @@ -18,7 +18,7 @@ public String getName() { } //@formatter:off - public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = FieldNames.of( + public static final FieldNames USPV1_CORE_SEGMENT_FIELD_NAMES = new FieldNames<>( UspV1Field.VERSION, UspV1Field.NOTICE, UspV1Field.OPT_OUT_SALE, diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 8b94a586..86f63345 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -2,11 +2,12 @@ import java.util.List; import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; -public abstract class AbstractLazilyEncodableSection implements EncodableSection { +abstract class AbstractLazilyEncodableSection & FieldKey> extends EncodableSection { - protected List segments; + protected List> segments; private CharSequence encodedString = null; @@ -17,11 +18,11 @@ protected AbstractLazilyEncodableSection() { this.segments = initializeSegments(); } - protected abstract List initializeSegments(); + protected abstract List> initializeSegments(); - protected abstract CharSequence encodeSection(List segments); + protected abstract CharSequence encodeSection(List> segments); - protected abstract List decodeSection(CharSequence encodedString); + protected abstract List> decodeSection(CharSequence encodedString); public boolean hasField(String fieldName) { if (!this.decoded) { @@ -32,7 +33,25 @@ public boolean hasField(String fieldName) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = segments.get(i); + if (segment.hasField(fieldName)) { + return true; + } + } + + return false; + } + + public boolean hasField(E fieldName) { + if (!this.decoded) { + this.segments = this.decodeSection(this.encodedString); + this.dirty = false; + this.decoded = true; + } + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if (segment.hasField(fieldName)) { return true; } @@ -50,7 +69,25 @@ public Object getFieldValue(String fieldName) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = segments.get(i); + if(segment.hasField(fieldName)) { + return segment.getFieldValue(fieldName); + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public Object getFieldValue(E fieldName) { + if (!this.decoded) { + this.segments = this.decodeSection(this.encodedString); + this.dirty = false; + this.decoded = true; + } + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if(segment.hasField(fieldName)) { return segment.getFieldValue(fieldName); } @@ -68,7 +105,27 @@ public void setFieldValue(String fieldName, Object value) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = segments.get(i); + if(segment.hasField(fieldName)) { + segment.setFieldValue(fieldName, value); + this.dirty = true; + return; + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public void setFieldValue(E fieldName, Object value) { + if (!this.decoded) { + this.segments = this.decodeSection(this.encodedString); + this.dirty = false; + this.decoded = true; + } + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); if(segment.hasField(fieldName)) { segment.setFieldValue(fieldName, value); this.dirty = true; @@ -102,7 +159,7 @@ public void decode(CharSequence encodedString) { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); - for (EncodableSegment segment: segments) { + for (EncodableSegment segment: segments) { sb.append(", ").append(segment.toString()); } sb.append('}'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index a87414aa..f5661a06 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -2,29 +2,29 @@ import com.iab.gpp.encoder.field.FieldKey; -public interface EncodableSection & FieldKey> { +public abstract class EncodableSection & FieldKey> { - int getId(); + public abstract int getId(); - String getName(); + public abstract String getName(); - int getVersion(); + public abstract int getVersion(); - boolean hasField(E fieldName); + public abstract boolean hasField(E fieldName); - Object getFieldValue(E fieldName); + public abstract Object getFieldValue(E fieldName); - void setFieldValue(E fieldName, Object value); + public abstract void setFieldValue(E fieldName, Object value); - boolean hasField(String fieldName); + public abstract boolean hasField(String fieldName); - Object getFieldValue(String fieldName); + public abstract Object getFieldValue(String fieldName); - void setFieldValue(String fieldName, Object value); + public abstract void setFieldValue(String fieldName, Object value); - String encode(); + public abstract String encode(); - CharSequence encodeCharSequence(); + public abstract CharSequence encodeCharSequence(); - void decode(CharSequence encodedString); + public abstract void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 9e00e72f..7467d8f6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -20,7 +20,7 @@ public UsCa() { } public UsCa(CharSequence encodedString) { - super(); + this(); decode(encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 5a911351..8e218ac1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -3,14 +3,14 @@ import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; +import com.iab.gpp.encoder.bitstring.BitStringReader; import com.iab.gpp.encoder.datatype.AbstractEncodableBitStringDataType; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.field.EncodableBitStringFields; +import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.FieldNames; -import com.iab.gpp.encoder.field.UsCaField; -public abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { +abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { private final AbstractBase64UrlEncoder base64UrlEncoder; protected AbstractBase64Segment(FieldNames fieldNames, AbstractBase64UrlEncoder base64UrlEncoder) { @@ -20,20 +20,40 @@ protected AbstractBase64Segment(FieldNames fieldNames, AbstractBase64UrlEncod @Override protected final StringBuilder encodeSegment() { - BitStringBuilder bitString = fields.encode(); + BitStringBuilder bitString = new BitStringBuilder(); + int size = fieldNames.size(); + for (int i = 0; i < size; i++) { + AbstractEncodableBitStringDataType field = get(i); + if (field != null) { + field.encode(bitString); + } else { + throw new EncodingException("Field not found: '" + fieldNames.get(i) + "'"); + } + } + return base64UrlEncoder.encode(bitString); } @Override protected final void decodeSegment(CharSequence encodedString) { - if (encodedString == null || encodedString.length() == 0) { - this.fields.reset(fields); - } try { BitString bitString = decodeBitString(encodedString); - this.fields.decode(bitString); + int size = fieldNames.size(); + BitStringReader reader = new BitStringReader(bitString); + for (int i = 0; i < size; i++) { + AbstractEncodableBitStringDataType field = get(i); + if (field != null) { + try { + field.decode(reader); + } catch (Exception e) { + throw new DecodingException("Unable to decode " + fieldNames.get(i), e); + } + } else { + throw new DecodingException("Field not found: '" + fieldNames.get(i) + "'"); + } + } } catch (Exception e) { - throw new DecodingException("Unable to decode UsCaCoreSegment '" + encodedString + "'", e); + throw new DecodingException("Unable to decode "+ getClass().getSimpleName() +" '" + encodedString + "'", e); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index d4f5f3c5..2b0bc22d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -4,9 +4,10 @@ import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.Fields; +import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.field.FieldNames; -public abstract class AbstractLazilyEncodableSegment> implements EncodableSegment { +abstract class AbstractLazilyEncodableSegment & FieldKey, T extends DataType> extends EncodableSegment { protected static final Predicate nullableBooleanAsTwoBitIntegerValidator = (n -> n >= 0 && n <= 2); protected static final Predicate nonNullableBooleanAsTwoBitIntegerValidator = (n -> n >= 1 && n <= 2); @@ -19,34 +20,90 @@ public abstract class AbstractLazilyEncodableSegment> implem return true; }); - protected T fields; + protected final FieldNames fieldNames; + private final Object[] values; + + protected boolean containsKey(E key) { + Integer index = fieldNames.getIndex(key); + return index != null && values[index] != null; + } + + protected void initialize(E key, T value) { + Integer index = fieldNames.getIndex(key); + if (index == null) { + throw new IllegalArgumentException("invalid key "+ key); + } + values[index] = value; + } + + @SuppressWarnings("unchecked") + protected T get(int index) { + return (T) values[index]; + } + + protected T get(E key) { + Integer index = fieldNames.getIndex(key); + if (index != null) { + return get(index); + } + return null; + } + + protected boolean isDirty() { + int size = fieldNames.size(); + for (int i = 0; i < size; i++) { + T value = get(i); + if (value != null && value.isDirty()) { + return true; + } + } + return false; + } + + protected void markClean() { + int size = fieldNames.size(); + for (int i = 0; i < size; i++) { + T value = get(i); + if (value != null) { + value.setDirty(false); + } + } + } private CharSequence encodedString = null; private boolean decoded = true; - protected AbstractLazilyEncodableSegment() { - this.fields = initializeFields(); + protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { + this.fieldNames = fieldNames; + this.values = new Object[fieldNames.size()]; } - protected abstract T initializeFields(); + protected abstract StringBuilder encodeSegment(); - protected abstract StringBuilder encodeSegment(T fields); - - protected abstract void decodeSegment(CharSequence encodedString, T fields); + protected abstract void decodeSegment(CharSequence encodedString); public boolean hasField(String fieldName) { - return this.fields.containsKey(fieldName); + E key = fieldNames.convertKey(fieldName); + return key != null && hasField(key); + } + + public boolean hasField(E fieldName) { + return this.containsKey(fieldName); } public Object getFieldValue(String fieldName) { + return getFieldValue(fieldNames.convertKey(fieldName)); + } + + public Object getFieldValue(E fieldName) { if (!this.decoded) { - this.decodeSegment(this.encodedString, this.fields); - this.fields.markClean(); + this.decodeSegment(this.encodedString); + this.markClean(); this.decoded = true; } - DataType field = this.fields.get(fieldName); + DataType field = this.get(fieldName); if (field != null) { return field.getValue(); } else { @@ -55,13 +112,17 @@ public Object getFieldValue(String fieldName) { } public void setFieldValue(String fieldName, Object value) { + setFieldValue(fieldNames.convertKey(fieldName), value); + } + + public void setFieldValue(E fieldName, Object value) { if (!this.decoded) { - this.decodeSegment(this.encodedString, this.fields); - this.fields.markClean(); + this.decodeSegment(this.encodedString); + this.markClean(); this.decoded = true; } - DataType field = this.fields.get(fieldName); + DataType field = this.get(fieldName); if (field != null) { field.setValue(value); } else { @@ -70,9 +131,9 @@ public void setFieldValue(String fieldName, Object value) { } public CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.fields.isDirty()) { - this.encodedString = encodeSegment(this.fields); - this.fields.markClean(); + if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { + this.encodedString = encodeSegment(); + this.markClean(); this.decoded = true; } @@ -81,14 +142,16 @@ public CharSequence encodeCharSequence() { public void decode(CharSequence encodedString) { this.encodedString = encodedString; - this.fields.markClean(); + this.markClean(); this.decoded = false; } public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{name=").append(getClass().getSimpleName()); - for (String field : fields.getNames()) { + int size = fieldNames.size(); + for (int i = 0; i < size; i++) { + E field = fieldNames.get(i); if (hasField(field)) { sb.append(", ").append(field).append('=').append(getFieldValue(field)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index ae6256b8..5f05bbf4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -2,21 +2,21 @@ import com.iab.gpp.encoder.field.FieldKey; -public interface EncodableSegment & FieldKey> { +public abstract class EncodableSegment & FieldKey> { - boolean hasField(E fieldName); + public abstract boolean hasField(E fieldName); - Object getFieldValue(E fieldName); + public abstract Object getFieldValue(E fieldName); - void setFieldValue(E fieldName, Object value); + public abstract void setFieldValue(E fieldName, Object value); - boolean hasField(String fieldName); + public abstract boolean hasField(String fieldName); - Object getFieldValue(String fieldName); + public abstract Object getFieldValue(String fieldName); - void setFieldValue(String fieldName, Object value); + public abstract void setFieldValue(String fieldName, Object value); - CharSequence encodeCharSequence(); + public abstract CharSequence encodeCharSequence(); - void decode(CharSequence encodedString); + public abstract void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 7501e7b8..99d94b5e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -10,9 +10,9 @@ public final class HeaderV1CoreSegment extends AbstractBase64Segment { public UsCaCoreSegment() { super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); - fields.put(UsCaField.SALE_OPT_OUT_NOTICE, + initialize(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); + initialize(UsCaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SHARING_OPT_OUT_NOTICE, + initialize(UsCaField.SHARING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, + initialize(UsCaField.SENSITIVE_DATA_LIMIT_USE_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SALE_OPT_OUT, + initialize(UsCaField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SHARING_OPT_OUT, + initialize(UsCaField.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.SENSITIVE_DATA_PROCESSING, + initialize(UsCaField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 9) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 2) + initialize(UsCaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 2) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCaField.PERSONAL_DATA_CONSENTS, + initialize(UsCaField.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.MSPA_COVERED_TRANSACTION, + initialize(UsCaField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsCaField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCaField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsCaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 9dfbfb8c..398327b9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -10,9 +10,9 @@ public final class UsCaGpcSegment extends AbstractBase64Segment { public UsCaGpcSegment() { super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsCaField.GPC, new EncodableBoolean(false)); + initialize(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsCaField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index e98f50eb..7fd4a971 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -10,26 +10,26 @@ public final class UsCoCoreSegment extends AbstractBase64Segment { public UsCoCoreSegment() { super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); - fields.put(UsCoField.SHARING_NOTICE, + initialize(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); + initialize(UsCoField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.SALE_OPT_OUT_NOTICE, + initialize(UsCoField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsCoField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.SALE_OPT_OUT, + initialize(UsCoField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsCoField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 7) + initialize(UsCoField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 7) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsCoField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.MSPA_COVERED_TRANSACTION, + initialize(UsCoField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsCoField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCoField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsCoField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 1da25138..33a9712f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -10,9 +10,9 @@ public final class UsCoGpcSegment extends AbstractBase64Segment { public UsCoGpcSegment() { super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsCoField.GPC, new EncodableBoolean(false)); + initialize(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsCoField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index 707ffc68..c9d477bb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -10,27 +10,27 @@ public final class UsCtCoreSegment extends AbstractBase64Segment { public UsCtCoreSegment() { super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); - fields.put(UsCtField.SHARING_NOTICE, + initialize(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); + initialize(UsCtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.SALE_OPT_OUT_NOTICE, + initialize(UsCtField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsCtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.SALE_OPT_OUT, + initialize(UsCtField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsCtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.SENSITIVE_DATA_PROCESSING, + initialize(UsCtField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsCtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsCtField.MSPA_COVERED_TRANSACTION, + initialize(UsCtField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsCtField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsCtField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsCtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index da0aa637..f12f2e39 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -10,9 +10,9 @@ public final class UsCtGpcSegment extends AbstractBase64Segment { public UsCtGpcSegment() { super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsCtField.GPC, new EncodableBoolean(false)); + initialize(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsCtField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index e4f2c9c7..991f0f0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -10,30 +10,30 @@ public final class UsDeCoreSegment extends AbstractBase64Segment { public UsDeCoreSegment() { super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); - fields.put(UsDeField.PROCESSING_NOTICE, + initialize(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); + initialize(UsDeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.SALE_OPT_OUT_NOTICE, + initialize(UsDeField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsDeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.SALE_OPT_OUT, + initialize(UsDeField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsDeField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.SENSITIVE_DATA_PROCESSING, + initialize(UsDeField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 9) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsDeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsDeField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.MSPA_COVERED_TRANSACTION, + initialize(UsDeField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsDeField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsDeField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsDeField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 628f0c21..06b1d870 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -10,9 +10,9 @@ public final class UsDeGpcSegment extends AbstractBase64Segment { public UsDeGpcSegment() { super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsDeField.GPC, new EncodableBoolean(false)); + initialize(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsDeField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 366cf2d8..259b662b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -10,29 +10,29 @@ public final class UsFlCoreSegment extends AbstractBase64Segment { public UsFlCoreSegment() { super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); - fields.put(UsFlField.PROCESSING_NOTICE, + initialize(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); + initialize(UsFlField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.SALE_OPT_OUT_NOTICE, + initialize(UsFlField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsFlField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.SALE_OPT_OUT, + initialize(UsFlField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsFlField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.SENSITIVE_DATA_PROCESSING, + initialize(UsFlField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsFlField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsFlField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.MSPA_COVERED_TRANSACTION, + initialize(UsFlField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsFlField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsFlField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsFlField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 9f5bb0a3..93e91101 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -10,29 +10,29 @@ public final class UsIaCoreSegment extends AbstractBase64Segment { public UsIaCoreSegment() { super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); - fields.put(UsIaField.PROCESSING_NOTICE, + initialize(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); + initialize(UsIaField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.SALE_OPT_OUT_NOTICE, + initialize(UsIaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsIaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, + initialize(UsIaField.SENSITIVE_DATA_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.SALE_OPT_OUT, + initialize(UsIaField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsIaField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.SENSITIVE_DATA_PROCESSING, + initialize(UsIaField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsIaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.MSPA_COVERED_TRANSACTION, + initialize(UsIaField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsIaField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsIaField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsIaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 5c5deb06..58e907c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -10,9 +10,9 @@ public final class UsIaGpcSegment extends AbstractBase64Segment { public UsIaGpcSegment() { super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsIaField.GPC, new EncodableBoolean(false)); + initialize(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsIaField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index 72d52b8a..cd6ca67f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -10,29 +10,29 @@ public final class UsMtCoreSegment extends AbstractBase64Segment { public UsMtCoreSegment() { super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); - fields.put(UsMtField.SHARING_NOTICE, + initialize(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); + initialize(UsMtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.SALE_OPT_OUT_NOTICE, + initialize(UsMtField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsMtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.SALE_OPT_OUT, + initialize(UsMtField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsMtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.SENSITIVE_DATA_PROCESSING, + initialize(UsMtField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsMtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsMtField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.MSPA_COVERED_TRANSACTION, + initialize(UsMtField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsMtField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsMtField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsMtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index 2d079e14..d59599ab 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -10,9 +10,9 @@ public final class UsMtGpcSegment extends AbstractBase64Segment { public UsMtGpcSegment() { super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsMtField.GPC, new EncodableBoolean(false)); + initialize(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsMtField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 90a58bb4..9ef5d553 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -12,37 +12,37 @@ public final class UsNatCoreSegment extends AbstractBase64Segment { public UsNatCoreSegment() { super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); - fields.put(UsNatField.SHARING_NOTICE, + initialize(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); + initialize(UsNatField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SALE_OPT_OUT_NOTICE, + initialize(UsNatField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SHARING_OPT_OUT_NOTICE, + initialize(UsNatField.SHARING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsNatField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + initialize(UsNatField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, + initialize(UsNatField.SENSITIVE_DATA_LIMIT_USE_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SALE_OPT_OUT, + initialize(UsNatField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SHARING_OPT_OUT, + initialize(UsNatField.SHARING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsNatField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.SENSITIVE_DATA_PROCESSING, + initialize(UsNatField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 16) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsNatField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNatField.PERSONAL_DATA_CONSENTS, + initialize(UsNatField.PERSONAL_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.MSPA_COVERED_TRANSACTION, + initialize(UsNatField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsNatField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNatField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsNatField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index d2eb4207..21fc6f61 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -10,9 +10,9 @@ public final class UsNatGpcSegment extends AbstractBase64Segment { public UsNatGpcSegment() { super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsNatField.GPC, new EncodableBoolean(false)); + initialize(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsNatField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index 51c18681..f8ae7039 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -10,29 +10,29 @@ public final class UsNeCoreSegment extends AbstractBase64Segment { public UsNeCoreSegment() { super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); - fields.put(UsNeField.PROCESSING_NOTICE, + initialize(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); + initialize(UsNeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.SALE_OPT_OUT_NOTICE, + initialize(UsNeField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsNeField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.SALE_OPT_OUT, + initialize(UsNeField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsNeField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.SENSITIVE_DATA_PROCESSING, + initialize(UsNeField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsNeField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsNeField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.MSPA_COVERED_TRANSACTION, + initialize(UsNeField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsNeField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNeField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsNeField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index 8353380b..dd46ccf5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -10,9 +10,9 @@ public final class UsNeGpcSegment extends AbstractBase64Segment { public UsNeGpcSegment() { super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsNeField.GPC, new EncodableBoolean(false)); + initialize(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsNeField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 7819025b..123eb828 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -10,29 +10,29 @@ public final class UsNhCoreSegment extends AbstractBase64Segment { public UsNhCoreSegment() { super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); - fields.put(UsNhField.PROCESSING_NOTICE, + initialize(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); + initialize(UsNhField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.SALE_OPT_OUT_NOTICE, + initialize(UsNhField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsNhField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.SALE_OPT_OUT, + initialize(UsNhField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsNhField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.SENSITIVE_DATA_PROCESSING, + initialize(UsNhField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsNhField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsNhField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.MSPA_COVERED_TRANSACTION, + initialize(UsNhField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsNhField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNhField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsNhField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 75682713..0d4fc547 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -10,9 +10,9 @@ public final class UsNhGpcSegment extends AbstractBase64Segment { public UsNhGpcSegment() { super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsNhField.GPC, new EncodableBoolean(false)); + initialize(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsNhField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index 566831fb..b536cb21 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -10,29 +10,29 @@ public final class UsNjCoreSegment extends AbstractBase64Segment { public UsNjCoreSegment() { super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); - fields.put(UsNjField.PROCESSING_NOTICE, + initialize(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); + initialize(UsNjField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.SALE_OPT_OUT_NOTICE, + initialize(UsNjField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsNjField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.SALE_OPT_OUT, + initialize(UsNjField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsNjField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.SENSITIVE_DATA_PROCESSING, + initialize(UsNjField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 10) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) + initialize(UsNjField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 5) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsNjField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.MSPA_COVERED_TRANSACTION, + initialize(UsNjField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsNjField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsNjField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsNjField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index e00f54c1..7c6c3d12 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -10,9 +10,9 @@ public final class UsNjGpcSegment extends AbstractBase64Segment { public UsNjGpcSegment() { super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsNjField.GPC, new EncodableBoolean(false)); + initialize(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsNjField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index ee928561..c4a913d5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -10,29 +10,29 @@ public final class UsOrCoreSegment extends AbstractBase64Segment { public UsOrCoreSegment() { super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); - fields.put(UsOrField.PROCESSING_NOTICE, + initialize(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); + initialize(UsOrField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.SALE_OPT_OUT_NOTICE, + initialize(UsOrField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsOrField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.SALE_OPT_OUT, + initialize(UsOrField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsOrField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.SENSITIVE_DATA_PROCESSING, + initialize(UsOrField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 11) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) + initialize(UsOrField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedIntegerList(2, 3) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsOrField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.MSPA_COVERED_TRANSACTION, + initialize(UsOrField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsOrField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsOrField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsOrField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 46a889a8..67b84aa3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -10,9 +10,9 @@ public final class UsOrGpcSegment extends AbstractBase64Segment { public UsOrGpcSegment() { super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsOrField.GPC, new EncodableBoolean(false)); + initialize(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsOrField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index f031154d..eea91bcd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -10,29 +10,29 @@ public final class UsTnCoreSegment extends AbstractBase64Segment { public UsTnCoreSegment() { super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); - fields.put(UsTnField.PROCESSING_NOTICE, + initialize(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); + initialize(UsTnField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.SALE_OPT_OUT_NOTICE, + initialize(UsTnField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsTnField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.SALE_OPT_OUT, + initialize(UsTnField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsTnField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.SENSITIVE_DATA_PROCESSING, + initialize(UsTnField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsTnField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsTnField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.MSPA_COVERED_TRANSACTION, + initialize(UsTnField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsTnField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTnField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsTnField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index c2ad6387..bde63ca8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -10,9 +10,9 @@ public final class UsTnGpcSegment extends AbstractBase64Segment { public UsTnGpcSegment() { super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsTnField.GPC, new EncodableBoolean(false)); + initialize(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsTnField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index 7e4b7b5d..de9e7238 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -10,29 +10,29 @@ public final class UsTxCoreSegment extends AbstractBase64Segment { public UsTxCoreSegment() { super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); - fields.put(UsTxField.PROCESSING_NOTICE, + initialize(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); + initialize(UsTxField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.SALE_OPT_OUT_NOTICE, + initialize(UsTxField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsTxField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.SALE_OPT_OUT, + initialize(UsTxField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsTxField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.SENSITIVE_DATA_PROCESSING, + initialize(UsTxField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsTxField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, + initialize(UsTxField.ADDITIONAL_DATA_PROCESSING_CONSENT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.MSPA_COVERED_TRANSACTION, + initialize(UsTxField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsTxField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsTxField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsTxField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index a526f28a..1b3c65b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -10,8 +10,8 @@ public final class UsTxGpcSegment extends AbstractBase64Segment { public UsTxGpcSegment() { super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); - fields.put(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); - fields.put(UsTxField.GPC, new EncodableBoolean(false)); + initialize(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); + initialize(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); + initialize(UsTxField.GPC, new EncodableBoolean(false)); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 1fb16fb5..4dfcff44 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -10,29 +10,29 @@ public final class UsUtCoreSegment extends AbstractBase64Segment { public UsUtCoreSegment() { super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); - fields.put(UsUtField.SHARING_NOTICE, + initialize(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); + initialize(UsUtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.SALE_OPT_OUT_NOTICE, + initialize(UsUtField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsUtField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, + initialize(UsUtField.SENSITIVE_DATA_PROCESSING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.SALE_OPT_OUT, + initialize(UsUtField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsUtField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.SENSITIVE_DATA_PROCESSING, + initialize(UsUtField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsUtField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.MSPA_COVERED_TRANSACTION, + initialize(UsUtField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsUtField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsUtField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsUtField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index 159532f5..d3db2a0c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -10,27 +10,27 @@ public final class UsVaCoreSegment extends AbstractBase64Segment { public UsVaCoreSegment() { super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); - fields.put(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); - fields.put(UsVaField.SHARING_NOTICE, + initialize(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); + initialize(UsVaField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.SALE_OPT_OUT_NOTICE, + initialize(UsVaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, + initialize(UsVaField.TARGETED_ADVERTISING_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.SALE_OPT_OUT, + initialize(UsVaField.SALE_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.TARGETED_ADVERTISING_OPT_OUT, + initialize(UsVaField.TARGETED_ADVERTISING_OPT_OUT, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.SENSITIVE_DATA_PROCESSING, + initialize(UsVaField.SENSITIVE_DATA_PROCESSING, new EncodableFixedIntegerList(2, 8) .withValidator(nullableBooleanAsTwoBitIntegerListValidator)); - fields.put(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, + initialize(UsVaField.KNOWN_CHILD_SENSITIVE_DATA_CONSENTS, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.MSPA_COVERED_TRANSACTION, + initialize(UsVaField.MSPA_COVERED_TRANSACTION, new EncodableFixedInteger(2, 1).withValidator(nonNullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.MSPA_OPT_OUT_OPTION_MODE, + initialize(UsVaField.MSPA_OPT_OUT_OPTION_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); - fields.put(UsVaField.MSPA_SERVICE_PROVIDER_MODE, + initialize(UsVaField.MSPA_SERVICE_PROVIDER_MODE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index 2acfcd47..b66807ba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -11,19 +11,19 @@ public final class UspV1CoreSegment extends AbstractLazilyEncodableSegment v == 'Y' || v == 'N' || v == '-'))); - fields.put(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); - fields.put(UspV1Field.LSPA_COVERED, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + initialize(UspV1Field.VERSION, new UnencodableInteger(UspV1.VERSION)); + initialize(UspV1Field.NOTICE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + initialize(UspV1Field.OPT_OUT_SALE, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); + initialize(UspV1Field.LSPA_COVERED, new UnencodableCharacter('-', (v -> v == 'Y' || v == 'N' || v == '-'))); } @Override protected StringBuilder encodeSegment() { StringBuilder str = new StringBuilder(); - str.append(fields.get(UspV1Field.VERSION).getValue()); - str.append(fields.get(UspV1Field.NOTICE).getValue()); - str.append(fields.get(UspV1Field.OPT_OUT_SALE).getValue()); - str.append(fields.get(UspV1Field.LSPA_COVERED).getValue()); + str.append(get(UspV1Field.VERSION).getValue()); + str.append(get(UspV1Field.NOTICE).getValue()); + str.append(get(UspV1Field.OPT_OUT_SALE).getValue()); + str.append(get(UspV1Field.LSPA_COVERED).getValue()); return str; } @@ -34,10 +34,10 @@ protected void decodeSegment(CharSequence encodedString) { } try { - fields.get(UspV1Field.VERSION).setValue((int)(encodedString.charAt(0) - '0')); - fields.get(UspV1Field.NOTICE).setValue(encodedString.charAt(1)); - fields.get(UspV1Field.OPT_OUT_SALE).setValue(encodedString.charAt(2)); - fields.get(UspV1Field.LSPA_COVERED).setValue(encodedString.charAt(3)); + get(UspV1Field.VERSION).setValue((int)(encodedString.charAt(0) - '0')); + get(UspV1Field.NOTICE).setValue(encodedString.charAt(1)); + get(UspV1Field.OPT_OUT_SALE).setValue(encodedString.charAt(2)); + get(UspV1Field.LSPA_COVERED).setValue(encodedString.charAt(3)); } catch (Exception e) { throw new DecodingException("Unable to decode UspV1CoreSegment '" + encodedString + "'", e); } From 842af4224a8198aaf5772b5cfac8512d64d3fdba Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 17:13:25 -0500 Subject: [PATCH 25/49] dry --- .../AbstractLazilyEncodableSection.java | 146 ++++++++++-------- .../com/iab/gpp/encoder/section/HeaderV1.java | 39 +---- .../com/iab/gpp/encoder/section/TcfCaV1.java | 69 ++++----- .../com/iab/gpp/encoder/section/TcfEuV2.java | 79 +++++----- .../com/iab/gpp/encoder/section/UsCa.java | 41 ++--- .../com/iab/gpp/encoder/section/UsCo.java | 43 ++---- .../com/iab/gpp/encoder/section/UsCt.java | 43 ++---- .../com/iab/gpp/encoder/section/UsDe.java | 43 ++---- .../com/iab/gpp/encoder/section/UsFl.java | 37 +---- .../com/iab/gpp/encoder/section/UsIa.java | 43 ++---- .../com/iab/gpp/encoder/section/UsMt.java | 43 ++---- .../com/iab/gpp/encoder/section/UsNat.java | 43 ++---- .../com/iab/gpp/encoder/section/UsNe.java | 43 ++---- .../com/iab/gpp/encoder/section/UsNh.java | 43 ++---- .../com/iab/gpp/encoder/section/UsNj.java | 43 ++---- .../com/iab/gpp/encoder/section/UsOr.java | 43 ++---- .../com/iab/gpp/encoder/section/UsTn.java | 43 ++---- .../com/iab/gpp/encoder/section/UsTx.java | 43 ++---- .../com/iab/gpp/encoder/section/UsUt.java | 37 +---- .../com/iab/gpp/encoder/section/UsVa.java | 37 +---- .../com/iab/gpp/encoder/section/UspV1.java | 37 +---- 21 files changed, 367 insertions(+), 671 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 86f63345..3809faa2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -1,40 +1,65 @@ package com.iab.gpp.encoder.section; +import java.util.ArrayList; import java.util.List; +import com.iab.gpp.encoder.datatype.DataType; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.segment.EncodableSegment; abstract class AbstractLazilyEncodableSection & FieldKey> extends EncodableSection { - protected List> segments; + protected final List> segments; private CharSequence encodedString = null; - private boolean dirty = false; private boolean decoded = true; - protected AbstractLazilyEncodableSection() { - this.segments = initializeSegments(); + protected AbstractLazilyEncodableSection(List> segments) { + this.segments = segments; } - protected abstract List> initializeSegments(); - - protected abstract CharSequence encodeSection(List> segments); - - protected abstract List> decodeSection(CharSequence encodedString); + protected void decodeSection(CharSequence encodedString) { + int numSegments = segments.size(); + if (numSegments == 1) { + segments.get(0).decode(encodedString); + return; + } + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < numSegments; i++) { + segments.get(i).decode(encodedSegments.get(i)); + } + } - public boolean hasField(String fieldName) { + protected CharSequence encodeSection() { + int numSegments = segments.size(); + if (numSegments == 1) { + return segments.get(0).encodeCharSequence(); + } + List encodedSegments = new ArrayList<>(numSegments); + for (int i = 0; i < numSegments; i++) { + encodedSegments.add(segments.get(i).encodeCharSequence()); + } + return SlicedCharSequence.join('.', encodedSegments); + } + + private void ensureDecode() { if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; + if(encodedString != null && encodedString.length() > 0) { + this.decodeSection(encodedString); + } + this.setDirty(false); this.decoded = true; } + } + + public final boolean hasField(String fieldName) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if (segment.hasField(fieldName)) { + if (segment.getField(fieldName) != null) { return true; } } @@ -42,17 +67,13 @@ public boolean hasField(String fieldName) { return false; } - public boolean hasField(E fieldName) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + public final boolean hasField(E fieldName) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if (segment.hasField(fieldName)) { + if (segment.getField(fieldName) != null) { return true; } } @@ -60,55 +81,45 @@ public boolean hasField(E fieldName) { return false; } - public Object getFieldValue(String fieldName) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + public final Object getFieldValue(String fieldName) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if(segment.hasField(fieldName)) { - return segment.getFieldValue(fieldName); + DataType field = segment.getField(fieldName); + if (field != null) { + return field.getValue(); } } throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public Object getFieldValue(E fieldName) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + public final Object getFieldValue(E fieldName) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if(segment.hasField(fieldName)) { - return segment.getFieldValue(fieldName); + DataType field = segment.getField(fieldName); + if (field != null) { + return field.getValue(); } } throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public void setFieldValue(String fieldName, Object value) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + public final void setFieldValue(String fieldName, Object value) { + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if(segment.hasField(fieldName)) { - segment.setFieldValue(fieldName, value); - this.dirty = true; + DataType field = segment.getField(fieldName); + if(field != null) { + field.setValue(value); return; } } @@ -117,18 +128,14 @@ public void setFieldValue(String fieldName, Object value) { } public void setFieldValue(E fieldName, Object value) { - if (!this.decoded) { - this.segments = this.decodeSection(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if(segment.hasField(fieldName)) { - segment.setFieldValue(fieldName, value); - this.dirty = true; + DataType field = segment.getField(fieldName); + if(field != null) { + field.setValue(value); return; } } @@ -136,27 +143,44 @@ public void setFieldValue(E fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public String encode() { + public final String encode() { return encodeCharSequence().toString(); } - public CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.dirty) { - this.encodedString = this.encodeSection(this.segments); - this.dirty = false; + public final CharSequence encodeCharSequence() { + if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { + this.encodedString = this.encodeSection(); + this.setDirty(false); this.decoded = true; } return this.encodedString; } - public void decode(CharSequence encodedString) { + public final void decode(CharSequence encodedString) { this.encodedString = encodedString; - this.dirty = false; + this.setDirty(false); this.decoded = false; } + + public final boolean isDirty() { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + if (segments.get(i).isDirty()) { + return true; + } + } + return false; + } + + public final void setDirty(boolean dirty) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + segments.get(i).setDirty(dirty); + } + } - public String toString() { + public final String toString() { StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); for (EncodableSegment segment: segments) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index c7dcfb25..4d3742b4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -1,11 +1,8 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.field.HeaderV1Field; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; public class HeaderV1 extends AbstractLazilyEncodableSection { @@ -15,11 +12,11 @@ public class HeaderV1 extends AbstractLazilyEncodableSection { public static final String NAME = "header"; public HeaderV1() { - super(); + super(Collections.singletonList(new HeaderV1CoreSegment())); } public HeaderV1(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -38,39 +35,7 @@ public int getVersion() { return HeaderV1.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new HeaderV1CoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i=0; i i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public IntegerSet getSectionsIds() { return (IntegerSet) this.getFieldValue(HeaderV1Field.SECTION_IDS); } - - } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 5d1639ce..be9c5e98 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -21,11 +21,11 @@ public class TcfCaV1 extends AbstractLazilyEncodableSection { public static final String NAME = "tcfcav1"; public TcfCaV1() { - super(); + super(Arrays.>asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment())); } public TcfCaV1(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -45,49 +45,40 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); - } - - @Override - public List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < encodedSegments.size(); i++) { - - /** - * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. - * - * A-H = '000' = 0 - * I-P = '001' = 1 - * Y-Z,a-f = '011' = 3 - * - * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved - * for the encoding version which only coincidentally works here because the version value is less than 8. - */ - - CharSequence encodedSegment = encodedSegments.get(i); - if (encodedSegment.length() > 0) { - char firstChar = encodedSegment.charAt(0); - - if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegment); - } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(2).decode(encodedSegment); - } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegment); - } else { - throw new DecodingException("Invalid segment '" + encodedSegment + "'"); - } + public void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < encodedSegments.size(); i++) { + + /** + * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. + * + * A-H = '000' = 0 + * I-P = '001' = 1 + * Y-Z,a-f = '011' = 3 + * + * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved + * for the encoding version which only coincidentally works here because the version value is less than 8. + */ + + CharSequence encodedSegment = encodedSegments.get(i); + if (encodedSegment.length() > 0) { + char firstChar = encodedSegment.charAt(0); + + if(firstChar >= 'A' && firstChar <= 'H') { + segments.get(0).decode(encodedSegment); + } else if(firstChar >= 'I' && firstChar <= 'P') { + segments.get(2).decode(encodedSegment); + } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { + segments.get(1).decode(encodedSegment); + } else { + throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } } } - - return segments; } @Override - public CharSequence encodeSection(List> segments) { + public CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 7aaf4989..ba70c5c3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -22,11 +22,11 @@ public class TcfEuV2 extends AbstractLazilyEncodableSection { public static final String NAME = "tcfeuv2"; public TcfEuV2() { - super(); + super(Arrays.>asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment())); } public TcfEuV2(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -46,53 +46,44 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); - } - - @Override - public List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < encodedSegments.size(); i++) { - - /** - * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. - * - * A-H = '000' = 0 - * I-P = '001' = 1 - * Q-X = '010' = 2 - * Y-Z,a-f = '011' = 3 - * - * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved - * for the encoding version which only coincidentally works here because the version value is less than 8. - */ - - CharSequence encodedSegment = encodedSegments.get(i); - if (encodedSegment.length() > 0) { - char firstChar = encodedSegment.charAt(0); - - // unfortunately, the segment ordering doesn't match the segment ids - if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegment); - } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(3).decode(encodedSegment); - } else if(firstChar >= 'Q' && firstChar <= 'X') { - segments.get(2).decode(encodedSegment); - } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegment); - } else { - throw new DecodingException("Invalid segment '" + encodedSegment + "'"); - } + public void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < encodedSegments.size(); i++) { + + /** + * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. + * + * A-H = '000' = 0 + * I-P = '001' = 1 + * Q-X = '010' = 2 + * Y-Z,a-f = '011' = 3 + * + * Note that there is no segment id field for the core segment. Instead the first 6 bits are reserved + * for the encoding version which only coincidentally works here because the version value is less than 8. + */ + + CharSequence encodedSegment = encodedSegments.get(i); + if (encodedSegment.length() > 0) { + char firstChar = encodedSegment.charAt(0); + + // unfortunately, the segment ordering doesn't match the segment ids + if(firstChar >= 'A' && firstChar <= 'H') { + segments.get(0).decode(encodedSegment); + } else if(firstChar >= 'I' && firstChar <= 'P') { + segments.get(3).decode(encodedSegment); + } else if(firstChar >= 'Q' && firstChar <= 'X') { + segments.get(2).decode(encodedSegment); + } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { + segments.get(1).decode(encodedSegment); + } else { + throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } } } - - return segments; } @Override - public CharSequence encodeSection(List> segments) { + public CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -117,7 +108,7 @@ public CharSequence encodeSection(List> segments) } @Override - public void setFieldValue(String fieldName, Object value) throws InvalidFieldException { + public void setFieldValue(TcfEuV2Field fieldName, Object value) throws InvalidFieldException { super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 7467d8f6..760ef5fc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -16,7 +16,7 @@ public class UsCa extends AbstractLazilyEncodableSection { public static final String NAME = "usca"; public UsCa() { - super(); + super(Arrays.>asList(new UsCaCoreSegment(), new UsCaGpcSegment())); } public UsCa(CharSequence encodedString) { @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsCaCoreSegment(), new UsCaGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 91e3adae..387377cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -16,11 +16,11 @@ public class UsCo extends AbstractLazilyEncodableSection { public static final String NAME = "usco"; public UsCo() { - super(); + super(Arrays.>asList(new UsCoCoreSegment(), new UsCoGpcSegment())); } public UsCo(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsCoCoreSegment(), new UsCoGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 225fbc3a..6f218dda 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -16,11 +16,11 @@ public class UsCt extends AbstractLazilyEncodableSection { public static final String NAME = "usct"; public UsCt() { - super(); + super(Arrays.>asList(new UsCtCoreSegment(), new UsCtGpcSegment())); } public UsCt(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsCtCoreSegment(), new UsCtGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index de0ac909..8a9e8972 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -16,11 +16,11 @@ public class UsDe extends AbstractLazilyEncodableSection { public static final String NAME = "usde"; public UsDe() { - super(); + super(Arrays.>asList(new UsDeCoreSegment(), new UsDeGpcSegment())); } public UsDe(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsDeCoreSegment(), new UsDeGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if (!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if (segments.size() >= 2 && segments.get(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if (segments.size() >= 2 && segments.get(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 771e6278..42b8922b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -1,11 +1,8 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsFlCoreSegment; public class UsFl extends AbstractLazilyEncodableSection { @@ -15,11 +12,11 @@ public class UsFl extends AbstractLazilyEncodableSection { public static final String NAME = "usfl"; public UsFl() { - super(); + super(Collections.singletonList(new UsFlCoreSegment())); } public UsFl(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -38,36 +35,6 @@ public int getVersion() { return UsFl.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new UsFlCoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i = 0; i < segments.size(); i++) { - if (encodedSegments.size() > i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for (EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public Integer getProcessingNotice() { return (Integer) this.getFieldValue(UsFlField.PROCESSING_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index d19650e7..6757ab79 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -16,11 +16,11 @@ public class UsIa extends AbstractLazilyEncodableSection { public static final String NAME = "usia"; public UsIa() { - super(); + super(Arrays.>asList(new UsIaCoreSegment(), new UsIaGpcSegment())); } public UsIa(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsIaCoreSegment(), new UsIaGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if (!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if (segments.size() >= 2 && segments.get(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if (segments.size() >= 2 && segments.get(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 0e5a0df9..ddbb8b8e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -16,11 +16,11 @@ public class UsMt extends AbstractLazilyEncodableSection { public static final String NAME = "usmt"; public UsMt() { - super(); + super(Arrays.>asList(new UsMtCoreSegment(), new UsMtGpcSegment())); } public UsMt(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsMtCoreSegment(), new UsMtGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 480178f3..3b466f74 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -16,11 +16,11 @@ public class UsNat extends AbstractLazilyEncodableSection { public static final String NAME = "usnat"; public UsNat() { - super(); + super(Arrays.>asList(new UsNatCoreSegment(), new UsNatGpcSegment())); } public UsNat(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsNatCoreSegment(), new UsNatGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index e4d4f32e..5e5b287c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -16,11 +16,11 @@ public class UsNe extends AbstractLazilyEncodableSection { public static final String NAME = "usne"; public UsNe() { - super(); + super(Arrays.>asList(new UsNeCoreSegment(), new UsNeGpcSegment())); } public UsNe(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsNeCoreSegment(), new UsNeGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index fbeae34a..99f46231 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -16,11 +16,11 @@ public class UsNh extends AbstractLazilyEncodableSection { public static final String NAME = "usnh"; public UsNh() { - super(); + super(Arrays.>asList(new UsNhCoreSegment(), new UsNhGpcSegment())); } public UsNh(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsNhCoreSegment(), new UsNhGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index bf5297cf..67c43218 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -16,11 +16,11 @@ public class UsNj extends AbstractLazilyEncodableSection { public static final String NAME = "usnj"; public UsNj() { - super(); + super(Arrays.>asList(new UsNjCoreSegment(), new UsNjGpcSegment())); } public UsNj(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsNjCoreSegment(), new UsNjGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 97c771e5..0ee0bfd1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -16,11 +16,11 @@ public class UsOr extends AbstractLazilyEncodableSection { public static final String NAME = "usor"; public UsOr() { - super(); + super(Arrays.>asList(new UsOrCoreSegment(), new UsOrGpcSegment())); } public UsOr(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsOrCoreSegment(), new UsOrGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index e582d57d..2efd6748 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -16,11 +16,11 @@ public class UsTn extends AbstractLazilyEncodableSection { public static final String NAME = "ustn"; public UsTn() { - super(); + super(Arrays.>asList(new UsTnCoreSegment(), new UsTnGpcSegment())); } public UsTn(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsTnCoreSegment(), new UsTnGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString,'.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString,'.'); - - if(encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if(encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); - } + if(encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if(encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 2f7f2e70..5c23bef2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -16,11 +16,11 @@ public class UsTx extends AbstractLazilyEncodableSection { public static final String NAME = "ustx"; public UsTx() { - super(); + super(Arrays.>asList(new UsTxCoreSegment(), new UsTxGpcSegment())); } public UsTx(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -40,39 +40,28 @@ public int getVersion() { } @Override - protected List> initializeSegments() { - return Arrays.asList(new UsTxCoreSegment(), new UsTxGpcSegment()); - } + protected void decodeSection(CharSequence encodedString) { + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - @Override - protected List> decodeSection(CharSequence encodedString) { - if(encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); - } - - if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); - } else { - segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); - } + if (encodedSegments.size() > 0) { + segments.get(0).decode(encodedSegments.get(0)); } - return segments; + if (encodedSegments.size() > 1) { + segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); + segments.get(1).decode(encodedSegments.get(1)); + } else { + segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); + } } @Override - protected CharSequence encodeSection(List> segments) { + protected CharSequence encodeSection() { List encodedSegments = new ArrayList<>(segments.size()); - if(!segments.isEmpty()) { - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); - } + encodedSegments.add(segments.get(0).encodeCharSequence()); + if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(segments.get(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index caec1ae6..52530473 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -1,11 +1,8 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsUtCoreSegment; public class UsUt extends AbstractLazilyEncodableSection { @@ -15,11 +12,11 @@ public class UsUt extends AbstractLazilyEncodableSection { public static final String NAME = "usut"; public UsUt() { - super(); + super(Collections.singletonList(new UsUtCoreSegment())); } public UsUt(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -38,36 +35,6 @@ public int getVersion() { return UsUt.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new UsUtCoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i = 0; i < segments.size(); i++) { - if (encodedSegments.size() > i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsUtField.SHARING_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index efd499ee..33b267ba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -1,11 +1,8 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsVaCoreSegment; public class UsVa extends AbstractLazilyEncodableSection { @@ -15,11 +12,11 @@ public class UsVa extends AbstractLazilyEncodableSection { public static final String NAME = "usva"; public UsVa() { - super(); + super(Collections.singletonList(new UsVaCoreSegment())); } public UsVa(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -38,36 +35,6 @@ public int getVersion() { return UsVa.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new UsVaCoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i = 0; i < segments.size(); i++) { - if (encodedSegments.size() > i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for (EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public Integer getSharingNotice() { return (Integer) this.getFieldValue(UsVaField.SHARING_NOTICE); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index ef76b18d..fff8469c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -1,10 +1,7 @@ package com.iab.gpp.encoder.section; -import java.util.ArrayList; import java.util.Collections; -import java.util.List; import com.iab.gpp.encoder.field.UspV1Field; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UspV1CoreSegment; public class UspV1 extends AbstractLazilyEncodableSection { @@ -14,11 +11,11 @@ public class UspV1 extends AbstractLazilyEncodableSection { public static final String NAME = "uspv1"; public UspV1() { - super(); + super(Collections.singletonList(new UspV1CoreSegment())); } public UspV1(CharSequence encodedString) { - super(); + this(); decode(encodedString); } @@ -37,36 +34,6 @@ public int getVersion() { return UspV1.VERSION; } - @Override - protected List> initializeSegments() { - return Collections.singletonList(new UspV1CoreSegment()); - } - - @Override - protected List> decodeSection(CharSequence encodedString) { - if (encodedString != null && encodedString.length() > 0) { - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - - for (int i=0; i < segments.size(); i++) { - if (encodedSegments.size() > i) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - } - - return segments; - } - - @Override - protected CharSequence encodeSection(List> segments) { - List encodedSegments = new ArrayList<>(segments.size()); - for(EncodableSegment segment : segments) { - encodedSegments.add(segment.encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - public Character getNotice() { return (Character) this.getFieldValue(UspV1Field.NOTICE); } From 80abb082db324980411e28d8d5511fdf8f6daee9 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 17:24:12 -0500 Subject: [PATCH 26/49] use an abstract method --- .../gpp/encoder/segment/AbstractBase64Segment.java | 13 ++++++++----- .../gpp/encoder/segment/HeaderV1CoreSegment.java | 3 +-- .../iab/gpp/encoder/segment/TcfCaV1CoreSegment.java | 3 +-- .../segment/TcfCaV1DisclosedVendorsSegment.java | 3 +-- .../segment/TcfCaV1PublisherPurposesSegment.java | 3 +-- .../iab/gpp/encoder/segment/TcfEuV2CoreSegment.java | 7 ++++++- .../segment/TcfEuV2PublisherPurposesSegment.java | 7 ++++++- .../segment/TcfEuV2VendorsAllowedSegment.java | 6 +++++- .../segment/TcfEuV2VendorsDisclosedSegment.java | 7 ++++++- .../iab/gpp/encoder/segment/UsCaCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsCaGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsCoCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsCoGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsCtCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsCtGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsDeCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsDeGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsFlCoreSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsIaCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsIaGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsMtCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsMtGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNatCoreSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNatGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNeCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsNeGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNhCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsNhGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsNjCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsNjGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsOrCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsOrGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsTnCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsTnGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsTxCoreSegment.java | 3 +-- .../com/iab/gpp/encoder/segment/UsTxGpcSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsUtCoreSegment.java | 3 +-- .../iab/gpp/encoder/segment/UsVaCoreSegment.java | 3 +-- 38 files changed, 64 insertions(+), 75 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 8e218ac1..46317017 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; +import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; @@ -12,10 +13,12 @@ abstract class AbstractBase64Segment & FieldKey> extends AbstractLazilyEncodableSegment> { - private final AbstractBase64UrlEncoder base64UrlEncoder; - protected AbstractBase64Segment(FieldNames fieldNames, AbstractBase64UrlEncoder base64UrlEncoder) { + protected AbstractBase64Segment(FieldNames fieldNames) { super(fieldNames); - this.base64UrlEncoder = base64UrlEncoder; + } + + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return CompressedBase64UrlEncoder.getInstance(); } @Override @@ -31,7 +34,7 @@ protected final StringBuilder encodeSegment() { } } - return base64UrlEncoder.encode(bitString); + return getBase64UrlEncoder().encode(bitString); } @Override @@ -58,7 +61,7 @@ protected final void decodeSegment(CharSequence encodedString) { } protected BitString decodeBitString(CharSequence encodedString) { - return base64UrlEncoder.decode(encodedString); + return getBase64UrlEncoder().decode(encodedString); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java index 99d94b5e..3e926695 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/HeaderV1CoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFibonacciIntegerRange; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.field.HeaderV1Field; @@ -9,7 +8,7 @@ public final class HeaderV1CoreSegment extends AbstractBase64Segment { public HeaderV1CoreSegment() { - super(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(HeaderV1Field.HEADER_CORE_SEGMENT_FIELD_NAMES); initialize(HeaderV1Field.ID, new EncodableFixedInteger(6, HeaderV1.ID)); initialize(HeaderV1Field.VERSION, new EncodableFixedInteger(6, HeaderV1.VERSION)); initialize(HeaderV1Field.SECTION_IDS, new EncodableFibonacciIntegerRange()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index 3630ac56..fb0151f9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.time.Instant; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableDatetime; @@ -15,7 +14,7 @@ public final class TcfCaV1CoreSegment extends AbstractBase64Segment { public TcfCaV1CoreSegment() { - super(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(TcfCaV1Field.TCFCAV1_CORE_SEGMENT_FIELD_NAMES); // NOTE: TcfCaV1.setFieldValue records modifications Instant date = Instant.EPOCH; initialize(TcfCaV1Field.VERSION, new EncodableFixedInteger(6, TcfCaV1.VERSION)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java index 33f0037f..939cfbad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1DisclosedVendorsSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; import com.iab.gpp.encoder.field.TcfCaV1Field; @@ -8,7 +7,7 @@ public final class TcfCaV1DisclosedVendorsSegment extends AbstractBase64Segment { public TcfCaV1DisclosedVendorsSegment() { - super(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(TcfCaV1Field.TCFCAV1_DISCLOSED_VENDORS_SEGMENT_FIELD_NAMES); initialize(TcfCaV1Field.DISCLOSED_VENDORS_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); initialize(TcfCaV1Field.DISCLOSED_VENDORS, new EncodableOptimizedFixedRange()); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java index 57519730..62f7f82f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1PublisherPurposesSegment.java @@ -1,7 +1,6 @@ package com.iab.gpp.encoder.segment; import java.util.function.IntSupplier; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFlexibleBitfield; @@ -10,7 +9,7 @@ public final class TcfCaV1PublisherPurposesSegment extends AbstractBase64Segment { public TcfCaV1PublisherPurposesSegment() { - super(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(TcfCaV1Field.TCFCAV1_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); initialize(TcfCaV1Field.PUB_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); initialize(TcfCaV1Field.PUB_PURPOSES_EXPRESS_CONSENT, new EncodableFixedBitfield(24)); initialize(TcfCaV1Field.PUB_PURPOSES_IMPLIED_CONSENT, new EncodableFixedBitfield(24)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 7c4ead4e..65e77b56 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.segment; import java.time.Instant; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableArrayOfFixedIntegerRanges; import com.iab.gpp.encoder.datatype.EncodableBoolean; @@ -15,7 +16,7 @@ public final class TcfEuV2CoreSegment extends AbstractBase64Segment { public TcfEuV2CoreSegment() { - super(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); + super(TcfEuV2Field.TCFEUV2_CORE_SEGMENT_FIELD_NAMES); // NOTE: TcfEuV2.setFieldValue records modifications Instant date = Instant.EPOCH; @@ -41,4 +42,8 @@ public TcfEuV2CoreSegment() { initialize(TcfEuV2Field.PUBLISHER_RESTRICTIONS, new EncodableArrayOfFixedIntegerRanges(6, 2, false)); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java index f98ddd57..3cd9ecce 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2PublisherPurposesSegment.java @@ -1,6 +1,7 @@ package com.iab.gpp.encoder.segment; import java.util.function.IntSupplier; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedBitfield; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -10,7 +11,7 @@ public final class TcfEuV2PublisherPurposesSegment extends AbstractBase64Segment { public TcfEuV2PublisherPurposesSegment() { - super(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); + super(TcfEuV2Field.TCFEUV2_PUBLISHER_PURPOSES_SEGMENT_FIELD_NAMES); initialize(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE, new EncodableFixedInteger(3, 3)); initialize(TcfEuV2Field.PUBLISHER_CONSENTS, new EncodableFixedBitfield(24)); initialize(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS, new EncodableFixedBitfield(24)); @@ -34,4 +35,8 @@ public int getAsInt() { new EncodableFlexibleBitfield(getLengthSupplier)); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java index e9f86810..608d9653 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsAllowedSegment.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -8,9 +9,12 @@ public final class TcfEuV2VendorsAllowedSegment extends AbstractBase64Segment { public TcfEuV2VendorsAllowedSegment() { - super(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); + super(TcfEuV2Field.TCFEUV2_VENDORS_ALLOWED_SEGMENT_FIELD_NAMES); initialize(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE, new EncodableFixedInteger(3, 2)); initialize(TcfEuV2Field.VENDORS_ALLOWED, new EncodableOptimizedFixedRange()); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java index 0ad39850..c73b21ec 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2VendorsDisclosedSegment.java @@ -1,5 +1,6 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.base64.AbstractBase64UrlEncoder; import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableOptimizedFixedRange; @@ -8,9 +9,13 @@ public final class TcfEuV2VendorsDisclosedSegment extends AbstractBase64Segment { public TcfEuV2VendorsDisclosedSegment() { - super(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES, TraditionalBase64UrlEncoder.getInstance()); + super(TcfEuV2Field.TCFEUV2_VENDORS_DISCLOSED_SEGMENT_FIELD_NAMES); initialize(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE, new EncodableFixedInteger(3, 1)); initialize(TcfEuV2Field.VENDORS_DISCLOSED, new EncodableOptimizedFixedRange()); } + protected AbstractBase64UrlEncoder getBase64UrlEncoder() { + return TraditionalBase64UrlEncoder.getInstance(); + } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java index 1e2dc093..69d87f9d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; @@ -9,7 +8,7 @@ public final class UsCaCoreSegment extends AbstractBase64Segment { public UsCaCoreSegment() { - super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCaField.USCA_CORE_SEGMENT_FIELD_NAMES); initialize(UsCaField.VERSION, new EncodableFixedInteger(6, UsCa.VERSION)); initialize(UsCaField.SALE_OPT_OUT_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java index 398327b9..47813843 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCaGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsCaGpcSegment extends AbstractBase64Segment { public UsCaGpcSegment() { - super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCaField.USCA_GPC_SEGMENT_FIELD_NAMES); initialize(UsCaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsCaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsCaField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java index 7fd4a971..2fdd170c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; @@ -9,7 +8,7 @@ public final class UsCoCoreSegment extends AbstractBase64Segment { public UsCoCoreSegment() { - super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCoField.USCO_CORE_SEGMENT_FIELD_NAMES); initialize(UsCoField.VERSION, new EncodableFixedInteger(6, UsCo.VERSION)); initialize(UsCoField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java index 33a9712f..884e6b0e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCoGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsCoGpcSegment extends AbstractBase64Segment { public UsCoGpcSegment() { - super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCoField.USCO_GPC_SEGMENT_FIELD_NAMES); initialize(UsCoField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsCoField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsCoField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java index c9d477bb..bfda454c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; @@ -9,7 +8,7 @@ public final class UsCtCoreSegment extends AbstractBase64Segment { public UsCtCoreSegment() { - super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCtField.USCT_CORE_SEGMENT_FIELD_NAMES); initialize(UsCtField.VERSION, new EncodableFixedInteger(6, UsCt.VERSION)); initialize(UsCtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java index f12f2e39..b6aea217 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsCtGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsCtGpcSegment extends AbstractBase64Segment { public UsCtGpcSegment() { - super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsCtField.USCT_GPC_SEGMENT_FIELD_NAMES); initialize(UsCtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsCtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsCtField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java index 991f0f0c..45404a78 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; @@ -9,7 +8,7 @@ public final class UsDeCoreSegment extends AbstractBase64Segment { public UsDeCoreSegment() { - super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsDeField.USDE_CORE_SEGMENT_FIELD_NAMES); initialize(UsDeField.VERSION, new EncodableFixedInteger(6, UsDe.VERSION)); initialize(UsDeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java index 06b1d870..f23ae86c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsDeGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsDeGpcSegment extends AbstractBase64Segment { public UsDeGpcSegment() { - super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsDeField.USDE_GPC_SEGMENT_FIELD_NAMES); initialize(UsDeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsDeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsDeField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java index 259b662b..315fbdcb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsFlCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; @@ -9,7 +8,7 @@ public final class UsFlCoreSegment extends AbstractBase64Segment { public UsFlCoreSegment() { - super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsFlField.USFL_CORE_SEGMENT_FIELD_NAMES); initialize(UsFlField.VERSION, new EncodableFixedInteger(6, UsFl.VERSION)); initialize(UsFlField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java index 93e91101..2e39d723 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; @@ -9,7 +8,7 @@ public final class UsIaCoreSegment extends AbstractBase64Segment { public UsIaCoreSegment() { - super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsIaField.USIA_CORE_SEGMENT_FIELD_NAMES); initialize(UsIaField.VERSION, new EncodableFixedInteger(6, UsIa.VERSION)); initialize(UsIaField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java index 58e907c3..99588b5d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsIaGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsIaGpcSegment extends AbstractBase64Segment { public UsIaGpcSegment() { - super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsIaField.USIA_GPC_SEGMENT_FIELD_NAMES); initialize(UsIaField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsIaField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsIaField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java index cd6ca67f..1a9c8099 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; @@ -9,7 +8,7 @@ public final class UsMtCoreSegment extends AbstractBase64Segment { public UsMtCoreSegment() { - super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsMtField.USMT_CORE_SEGMENT_FIELD_NAMES); initialize(UsMtField.VERSION, new EncodableFixedInteger(6, UsMt.VERSION)); initialize(UsMtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java index d59599ab..7caa3f4a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsMtGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsMtGpcSegment extends AbstractBase64Segment { public UsMtGpcSegment() { - super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsMtField.USMT_GPC_SEGMENT_FIELD_NAMES); initialize(UsMtField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsMtField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsMtField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java index 9ef5d553..f2ee5ad3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.bitstring.BitString; import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; @@ -11,7 +10,7 @@ public final class UsNatCoreSegment extends AbstractBase64Segment { public UsNatCoreSegment() { - super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNatField.USNAT_CORE_SEGMENT_FIELD_NAMES); initialize(UsNatField.VERSION, new EncodableFixedInteger(6, UsNat.VERSION)); initialize(UsNatField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java index 21fc6f61..f7ab9ba6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNatGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsNatGpcSegment extends AbstractBase64Segment { public UsNatGpcSegment() { - super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNatField.USNAT_GPC_SEGMENT_FIELD_NAMES); initialize(UsNatField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsNatField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsNatField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java index f8ae7039..a1eda150 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; @@ -9,7 +8,7 @@ public final class UsNeCoreSegment extends AbstractBase64Segment { public UsNeCoreSegment() { - super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNeField.USNE_CORE_SEGMENT_FIELD_NAMES); initialize(UsNeField.VERSION, new EncodableFixedInteger(6, UsNe.VERSION)); initialize(UsNeField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java index dd46ccf5..01456505 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNeGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsNeGpcSegment extends AbstractBase64Segment { public UsNeGpcSegment() { - super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNeField.USNE_GPC_SEGMENT_FIELD_NAMES); initialize(UsNeField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsNeField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsNeField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java index 123eb828..1376ec01 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; @@ -9,7 +8,7 @@ public final class UsNhCoreSegment extends AbstractBase64Segment { public UsNhCoreSegment() { - super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNhField.USNH_CORE_SEGMENT_FIELD_NAMES); initialize(UsNhField.VERSION, new EncodableFixedInteger(6, UsNh.VERSION)); initialize(UsNhField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java index 0d4fc547..9abeebb8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNhGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsNhGpcSegment extends AbstractBase64Segment { public UsNhGpcSegment() { - super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNhField.USNH_GPC_SEGMENT_FIELD_NAMES); initialize(UsNhField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsNhField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsNhField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java index b536cb21..f8809920 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; @@ -9,7 +8,7 @@ public final class UsNjCoreSegment extends AbstractBase64Segment { public UsNjCoreSegment() { - super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNjField.USNJ_CORE_SEGMENT_FIELD_NAMES); initialize(UsNjField.VERSION, new EncodableFixedInteger(6, UsNj.VERSION)); initialize(UsNjField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java index 7c6c3d12..c651e912 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsNjGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsNjGpcSegment extends AbstractBase64Segment { public UsNjGpcSegment() { - super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsNjField.USNJ_GPC_SEGMENT_FIELD_NAMES); initialize(UsNjField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsNjField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsNjField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java index c4a913d5..c06f095d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; @@ -9,7 +8,7 @@ public final class UsOrCoreSegment extends AbstractBase64Segment { public UsOrCoreSegment() { - super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsOrField.USOR_CORE_SEGMENT_FIELD_NAMES); initialize(UsOrField.VERSION, new EncodableFixedInteger(6, UsOr.VERSION)); initialize(UsOrField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java index 67b84aa3..aaacbc33 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsOrGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsOrGpcSegment extends AbstractBase64Segment { public UsOrGpcSegment() { - super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsOrField.USOR_GPC_SEGMENT_FIELD_NAMES); initialize(UsOrField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsOrField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsOrField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java index eea91bcd..b4749be5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; @@ -9,7 +8,7 @@ public final class UsTnCoreSegment extends AbstractBase64Segment { public UsTnCoreSegment() { - super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsTnField.USTN_CORE_SEGMENT_FIELD_NAMES); initialize(UsTnField.VERSION, new EncodableFixedInteger(6, UsTn.VERSION)); initialize(UsTnField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java index bde63ca8..26c63cbe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTnGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsTnGpcSegment extends AbstractBase64Segment { public UsTnGpcSegment() { - super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsTnField.USTN_GPC_SEGMENT_FIELD_NAMES); initialize(UsTnField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsTnField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsTnField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java index de9e7238..93cb427d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; @@ -9,7 +8,7 @@ public final class UsTxCoreSegment extends AbstractBase64Segment { public UsTxCoreSegment() { - super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsTxField.USTX_CORE_SEGMENT_FIELD_NAMES); initialize(UsTxField.VERSION, new EncodableFixedInteger(6, UsTx.VERSION)); initialize(UsTxField.PROCESSING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java index 1b3c65b6..bdeff998 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsTxGpcSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableBoolean; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.UnencodableBoolean; @@ -9,7 +8,7 @@ public final class UsTxGpcSegment extends AbstractBase64Segment { public UsTxGpcSegment() { - super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsTxField.USTX_GPC_SEGMENT_FIELD_NAMES); initialize(UsTxField.GPC_SEGMENT_TYPE, new EncodableFixedInteger(2, 1)); initialize(UsTxField.GPC_SEGMENT_INCLUDED, new UnencodableBoolean(true)); initialize(UsTxField.GPC, new EncodableBoolean(false)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java index 4dfcff44..7200ca99 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsUtCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; @@ -9,7 +8,7 @@ public final class UsUtCoreSegment extends AbstractBase64Segment { public UsUtCoreSegment() { - super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsUtField.USUT_CORE_SEGMENT_FIELD_NAMES); initialize(UsUtField.VERSION, new EncodableFixedInteger(6, UsUt.VERSION)); initialize(UsUtField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java index d3db2a0c..57cc14ab 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UsVaCoreSegment.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.segment; -import com.iab.gpp.encoder.base64.CompressedBase64UrlEncoder; import com.iab.gpp.encoder.datatype.EncodableFixedInteger; import com.iab.gpp.encoder.datatype.EncodableFixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; @@ -9,7 +8,7 @@ public final class UsVaCoreSegment extends AbstractBase64Segment { public UsVaCoreSegment() { - super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES, CompressedBase64UrlEncoder.getInstance()); + super(UsVaField.USVA_CORE_SEGMENT_FIELD_NAMES); initialize(UsVaField.VERSION, new EncodableFixedInteger(6, UsVa.VERSION)); initialize(UsVaField.SHARING_NOTICE, new EncodableFixedInteger(2, 0).withValidator(nullableBooleanAsTwoBitIntegerValidator)); From e96873e0f47a4ad6a5d220f58417d66ca4c21488 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 17:50:19 -0500 Subject: [PATCH 27/49] more dry --- .../gpp/encoder/field/AbstractEncodable.java | 46 ++++++++++++++ .../AbstractLazilyEncodableSection.java | 39 +----------- .../gpp/encoder/section/EncodableSection.java | 9 +-- .../com/iab/gpp/encoder/section/TcfCaV1.java | 5 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 4 +- .../com/iab/gpp/encoder/section/UsCa.java | 4 +- .../com/iab/gpp/encoder/section/UsCo.java | 4 +- .../com/iab/gpp/encoder/section/UsCt.java | 4 +- .../com/iab/gpp/encoder/section/UsDe.java | 4 +- .../com/iab/gpp/encoder/section/UsIa.java | 4 +- .../com/iab/gpp/encoder/section/UsMt.java | 4 +- .../com/iab/gpp/encoder/section/UsNat.java | 4 +- .../com/iab/gpp/encoder/section/UsNe.java | 4 +- .../com/iab/gpp/encoder/section/UsNh.java | 4 +- .../com/iab/gpp/encoder/section/UsNj.java | 4 +- .../com/iab/gpp/encoder/section/UsOr.java | 4 +- .../com/iab/gpp/encoder/section/UsTn.java | 4 +- .../com/iab/gpp/encoder/section/UsTx.java | 4 +- .../segment/AbstractBase64Segment.java | 4 +- .../AbstractLazilyEncodableSegment.java | 60 +++++++------------ .../gpp/encoder/segment/EncodableSegment.java | 20 +++---- .../gpp/encoder/segment/UspV1CoreSegment.java | 4 +- 22 files changed, 114 insertions(+), 129 deletions(-) create mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java new file mode 100644 index 00000000..2feadec5 --- /dev/null +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java @@ -0,0 +1,46 @@ +package com.iab.gpp.encoder.field; + +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; + +public abstract class AbstractEncodable implements Dirtyable { + + private CharSequence encodedString; + + protected boolean decoded = true; + + + public final String encode() { + return encodeCharSequence().toString(); + } + + protected void ensureDecode() { + if (!this.decoded) { + if(encodedString != null && encodedString.length() > 0) { + this.doDecode(this.encodedString); + } + this.setDirty(false); + this.decoded = true; + } + } + + public final CharSequence encodeCharSequence() { + if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { + this.encodedString = doEncode(); + this.setDirty(false); + this.decoded = true; + } + + return this.encodedString; + } + + protected abstract CharSequence doEncode(); + + protected abstract void doDecode(CharSequence encodedString); + + public final void decode(CharSequence encodedString) { + this.encodedString = encodedString; + this.setDirty(false); + this.decoded = false; + } + +} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 3809faa2..ed2bcbab 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -11,15 +11,11 @@ abstract class AbstractLazilyEncodableSection & FieldKey> exte protected final List> segments; - private CharSequence encodedString = null; - - private boolean decoded = true; - protected AbstractLazilyEncodableSection(List> segments) { this.segments = segments; } - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { int numSegments = segments.size(); if (numSegments == 1) { segments.get(0).decode(encodedString); @@ -31,7 +27,7 @@ protected void decodeSection(CharSequence encodedString) { } } - protected CharSequence encodeSection() { + protected CharSequence doEncode() { int numSegments = segments.size(); if (numSegments == 1) { return segments.get(0).encodeCharSequence(); @@ -42,16 +38,6 @@ protected CharSequence encodeSection() { } return SlicedCharSequence.join('.', encodedSegments); } - - private void ensureDecode() { - if (!this.decoded) { - if(encodedString != null && encodedString.length() > 0) { - this.decodeSection(encodedString); - } - this.setDirty(false); - this.decoded = true; - } - } public final boolean hasField(String fieldName) { ensureDecode(); @@ -143,26 +129,6 @@ public void setFieldValue(E fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public final String encode() { - return encodeCharSequence().toString(); - } - - public final CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { - this.encodedString = this.encodeSection(); - this.setDirty(false); - this.decoded = true; - } - - return this.encodedString; - } - - public final void decode(CharSequence encodedString) { - this.encodedString = encodedString; - this.setDirty(false); - this.decoded = false; - } - public final boolean isDirty() { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { @@ -181,6 +147,7 @@ public final void setDirty(boolean dirty) { } public final String toString() { + ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); for (EncodableSegment segment: segments) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index f5661a06..0d8a14a3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,8 +1,10 @@ package com.iab.gpp.encoder.section; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; +import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; -public abstract class EncodableSection & FieldKey> { +public abstract class EncodableSection & FieldKey> extends AbstractEncodable implements Dirtyable { public abstract int getId(); @@ -22,9 +24,4 @@ public abstract class EncodableSection & FieldKey> { public abstract void setFieldValue(String fieldName, Object value); - public abstract String encode(); - - public abstract CharSequence encodeCharSequence(); - - public abstract void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index be9c5e98..4b08f0d6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -45,7 +45,7 @@ public int getVersion() { } @Override - public void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { @@ -78,7 +78,7 @@ public void decodeSection(CharSequence encodedString) { } @Override - public CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -92,6 +92,7 @@ public CharSequence encodeSection() { @Override public void setFieldValue(TcfCaV1Field fieldName, Object value) throws InvalidFieldException { + // TODO: do this using dirty detection super.setFieldValue(fieldName, value); if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index ba70c5c3..aa5440d2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -46,7 +46,7 @@ public int getVersion() { } @Override - public void decodeSection(CharSequence encodedString) { + public void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < encodedSegments.size(); i++) { @@ -83,7 +83,7 @@ public void decodeSection(CharSequence encodedString) { } @Override - public CharSequence encodeSection() { + public CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 760ef5fc..601aa678 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 387377cb..cfd6c7e2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 6f218dda..4957fefe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 8a9e8972..3a839d9e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 6757ab79..4bf8085d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index ddbb8b8e..89530be5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 3b466f74..3c1e0292 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 5e5b287c..26c9208c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 99f46231..3a706f94 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 67c43218..c530a4f0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 0ee0bfd1..c1f1fe66 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 2efd6748..a56a29eb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); if(encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 5c23bef2..4c2b3b0f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -40,7 +40,7 @@ public int getVersion() { } @Override - protected void decodeSection(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { @@ -56,7 +56,7 @@ protected void decodeSection(CharSequence encodedString) { } @Override - protected CharSequence encodeSection() { + protected CharSequence doEncode() { List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java index 46317017..05af6a33 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractBase64Segment.java @@ -22,7 +22,7 @@ protected AbstractBase64UrlEncoder getBase64UrlEncoder() { } @Override - protected final StringBuilder encodeSegment() { + protected final CharSequence doEncode() { BitStringBuilder bitString = new BitStringBuilder(); int size = fieldNames.size(); for (int i = 0; i < size; i++) { @@ -38,7 +38,7 @@ protected final StringBuilder encodeSegment() { } @Override - protected final void decodeSegment(CharSequence encodedString) { + protected final void doDecode(CharSequence encodedString) { try { BitString bitString = decodeBitString(encodedString); int size = fieldNames.size(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 2b0bc22d..a6fcbddb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -23,6 +23,20 @@ abstract class AbstractLazilyEncodableSegment & FieldKey, T ex protected final FieldNames fieldNames; private final Object[] values; + + public final DataType getField(E fieldName) { + ensureDecode(); + return get(fieldName); + } + + public final E convertKey(String fieldName) { + return fieldNames.convertKey(fieldName); + } + + public final DataType getField(String fieldName) { + return get(fieldNames.convertKey(fieldName)); + } + protected boolean containsKey(E key) { Integer index = fieldNames.getIndex(key); return index != null && values[index] != null; @@ -49,7 +63,7 @@ protected T get(E key) { return null; } - protected boolean isDirty() { + public final boolean isDirty() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { T value = get(i); @@ -60,29 +74,22 @@ protected boolean isDirty() { return false; } - protected void markClean() { + public final void setDirty(boolean dirty) { int size = fieldNames.size(); for (int i = 0; i < size; i++) { T value = get(i); if (value != null) { - value.setDirty(false); + value.setDirty(dirty); } } } - private CharSequence encodedString = null; - - private boolean decoded = true; protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { this.fieldNames = fieldNames; this.values = new Object[fieldNames.size()]; } - protected abstract StringBuilder encodeSegment(); - - protected abstract void decodeSegment(CharSequence encodedString); - public boolean hasField(String fieldName) { E key = fieldNames.convertKey(fieldName); return key != null && hasField(key); @@ -97,11 +104,7 @@ public Object getFieldValue(String fieldName) { } public Object getFieldValue(E fieldName) { - if (!this.decoded) { - this.decodeSegment(this.encodedString); - this.markClean(); - this.decoded = true; - } + ensureDecode(); DataType field = this.get(fieldName); if (field != null) { @@ -111,16 +114,8 @@ public Object getFieldValue(E fieldName) { } } - public void setFieldValue(String fieldName, Object value) { - setFieldValue(fieldNames.convertKey(fieldName), value); - } - public void setFieldValue(E fieldName, Object value) { - if (!this.decoded) { - this.decodeSegment(this.encodedString); - this.markClean(); - this.decoded = true; - } + ensureDecode(); DataType field = this.get(fieldName); if (field != null) { @@ -130,23 +125,8 @@ public void setFieldValue(E fieldName, Object value) { } } - public CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { - this.encodedString = encodeSegment(); - this.markClean(); - this.decoded = true; - } - - return this.encodedString; - } - - public void decode(CharSequence encodedString) { - this.encodedString = encodedString; - this.markClean(); - this.decoded = false; - } - public String toString() { + ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append("{name=").append(getClass().getSimpleName()); int size = fieldNames.size(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 5f05bbf4..6cb4c220 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,22 +1,16 @@ package com.iab.gpp.encoder.segment; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.datatype.encoder.Dirtyable; +import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; -public abstract class EncodableSegment & FieldKey> { +public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { + public abstract DataType getField(E fieldName); + + public abstract DataType getField(String fieldName); - public abstract boolean hasField(E fieldName); - public abstract Object getFieldValue(E fieldName); public abstract void setFieldValue(E fieldName, Object value); - - public abstract boolean hasField(String fieldName); - - public abstract Object getFieldValue(String fieldName); - - public abstract void setFieldValue(String fieldName, Object value); - - public abstract CharSequence encodeCharSequence(); - - public abstract void decode(CharSequence encodedString); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java index b66807ba..2b33f181 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/UspV1CoreSegment.java @@ -18,7 +18,7 @@ public UspV1CoreSegment() { } @Override - protected StringBuilder encodeSegment() { + protected CharSequence doEncode() { StringBuilder str = new StringBuilder(); str.append(get(UspV1Field.VERSION).getValue()); str.append(get(UspV1Field.NOTICE).getValue()); @@ -28,7 +28,7 @@ protected StringBuilder encodeSegment() { } @Override - protected void decodeSegment(CharSequence encodedString) { + protected void doDecode(CharSequence encodedString) { if (encodedString == null || encodedString.length() != 4) { throw new DecodingException("Invalid uspv1 string: '" + encodedString + "'"); } From bbaad3c7282ee9bf74cd1d2f06f1ad7ee79e03f0 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 18:09:52 -0500 Subject: [PATCH 28/49] more dry --- .../gpp/encoder/field/AbstractEncodable.java | 1 - .../AbstractLazilyEncodableSection.java | 4 +-- .../com/iab/gpp/encoder/section/TcfCaV1.java | 16 +----------- .../com/iab/gpp/encoder/section/TcfEuV2.java | 15 +---------- .../AbstractLazilyEncodableSegment.java | 26 +------------------ 5 files changed, 5 insertions(+), 57 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java index 2feadec5..d9ae02c9 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java @@ -39,7 +39,6 @@ public final CharSequence encodeCharSequence() { public final void decode(CharSequence encodedString) { this.encodedString = encodedString; - this.setDirty(false); this.decoded = false; } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index ed2bcbab..2de0651e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -113,7 +113,7 @@ public final void setFieldValue(String fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public void setFieldValue(E fieldName, Object value) { + public final void setFieldValue(E fieldName, Object value) { ensureDecode(); int numSegments = segments.size(); @@ -150,7 +150,7 @@ public final String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); - for (EncodableSegment segment: segments) { + for (EncodableSegment segment : segments) { sb.append(", ").append(segment.toString()); } sb.append('}'); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 4b08f0d6..b38cda74 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -7,7 +7,6 @@ import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.TcfCaV1Field; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.TcfCaV1CoreSegment; @@ -79,6 +78,7 @@ protected void doDecode(CharSequence encodedString) { @Override protected CharSequence doEncode() { + this.setFieldValue(TcfCaV1Field.LAST_UPDATED, Instant.now()); List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -90,20 +90,6 @@ protected CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } - @Override - public void setFieldValue(TcfCaV1Field fieldName, Object value) throws InvalidFieldException { - // TODO: do this using dirty detection - super.setFieldValue(fieldName, value); - - if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { - Instant utcDateTime = Instant.now(); - - super.setFieldValue(TcfCaV1Field.CREATED, utcDateTime); - super.setFieldValue(TcfCaV1Field.LAST_UPDATED, utcDateTime); - } - } - - public Instant getCreated() { return (Instant) this.getFieldValue(TcfCaV1Field.CREATED); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index aa5440d2..9b78d14a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -7,7 +7,6 @@ import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.TcfEuV2Field; import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.TcfEuV2CoreSegment; @@ -84,6 +83,7 @@ public void doDecode(CharSequence encodedString) { @Override public CharSequence doEncode() { + this.setFieldValue(TcfEuV2Field.LAST_UPDATED, Instant.now()); List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -107,19 +107,6 @@ public CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } - @Override - public void setFieldValue(TcfEuV2Field fieldName, Object value) throws InvalidFieldException { - super.setFieldValue(fieldName, value); - - if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { - Instant utcDateTime = Instant.now(); - - super.setFieldValue(TcfEuV2Field.CREATED, utcDateTime); - super.setFieldValue(TcfEuV2Field.LAST_UPDATED, utcDateTime); - } - } - - public Instant getCreated() { return (Instant) this.getFieldValue(TcfEuV2Field.CREATED); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index a6fcbddb..8946ada8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -29,18 +29,9 @@ public final DataType getField(E fieldName) { return get(fieldName); } - public final E convertKey(String fieldName) { - return fieldNames.convertKey(fieldName); - } - public final DataType getField(String fieldName) { return get(fieldNames.convertKey(fieldName)); } - - protected boolean containsKey(E key) { - Integer index = fieldNames.getIndex(key); - return index != null && values[index] != null; - } protected void initialize(E key, T value) { Integer index = fieldNames.getIndex(key); @@ -90,19 +81,6 @@ protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { this.values = new Object[fieldNames.size()]; } - public boolean hasField(String fieldName) { - E key = fieldNames.convertKey(fieldName); - return key != null && hasField(key); - } - - public boolean hasField(E fieldName) { - return this.containsKey(fieldName); - } - - public Object getFieldValue(String fieldName) { - return getFieldValue(fieldNames.convertKey(fieldName)); - } - public Object getFieldValue(E fieldName) { ensureDecode(); @@ -132,9 +110,7 @@ public String toString() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { E field = fieldNames.get(i); - if (hasField(field)) { - sb.append(", ").append(field).append('=').append(getFieldValue(field)); - } + sb.append(", ").append(field).append('=').append(get(field)); } sb.append('}'); return sb.toString(); From 900b5429efae6c472f72cf4f2825a04817a7ef76 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 19:55:16 -0500 Subject: [PATCH 29/49] clean up flows --- .../java/com/iab/gpp/encoder/GppModel.java | 148 +++++++----------- .../gpp/encoder/field/AbstractEncodable.java | 2 +- .../AbstractLazilyEncodableSection.java | 29 +++- .../gpp/encoder/section/EncodableSection.java | 3 +- .../com/iab/gpp/encoder/section/TcfCaV1.java | 11 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 11 +- .../AbstractLazilyEncodableSegment.java | 4 +- .../gpp/encoder/segment/EncodableSegment.java | 5 +- 8 files changed, 103 insertions(+), 110 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 5e3b4bca..55d944f8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -9,6 +9,7 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.EncodableSection; @@ -35,16 +36,12 @@ import com.iab.gpp.encoder.section.UsVa; import com.iab.gpp.encoder.section.UspV1; -public class GppModel { - private Map> sections = new HashMap<>(); - - private String encodedString; - +public class GppModel extends AbstractEncodable { + private final Map> sections = new HashMap<>(); private boolean dirty = false; - private boolean decoded = true; - public GppModel() { + public GppModel() { } public GppModel(String encodedString) { @@ -123,6 +120,7 @@ private EncodableSection getOrCreateSection(String sectionName) { } if (section != null) { this.sections.put(sectionName, section); + this.dirty = true; } } return section; @@ -133,15 +131,10 @@ public void setFieldValue(String sectionName, FieldKey fieldName, Object value) } public void setFieldValue(String sectionName, String fieldName, Object value) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.setFieldValue(fieldName, value); - this.dirty = true; } else { throw new InvalidFieldException(sectionName + "." + fieldName + " not found"); } @@ -160,11 +153,7 @@ public Object getFieldValue(String sectionName, FieldKey fieldName) { } public Object getFieldValue(String sectionName, String fieldName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.getFieldValue(fieldName); @@ -178,11 +167,7 @@ public boolean hasField(int sectionId, String fieldName) { } public boolean hasField(String sectionName, String fieldName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); EncodableSection field = this.sections.get(sectionName); if (field != null) { return field.hasField(fieldName); @@ -196,22 +181,12 @@ public boolean hasSection(int sectionId) { } public boolean hasSection(String sectionName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } - + ensureDecode(); return this.sections.containsKey(sectionName); } public HeaderV1 getHeader() { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } - + ensureDecode(); HeaderV1 header = new HeaderV1(); try { header.setFieldValue("SectionIds", this.getSectionIds()); @@ -226,11 +201,7 @@ public EncodableSection getSection(int sectionId) { } public EncodableSection getSection(String sectionName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); return this.sections.get(sectionName); } @@ -239,21 +210,16 @@ public void deleteSection(int sectionId) { } public void deleteSection(String sectionName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } if (this.sections.remove(sectionName) != null) { this.dirty = true; } } public void clear() { - this.sections.clear(); - this.encodedString = null; - this.dirty = false; - this.decoded = true; + if (!this.sections.isEmpty()) { + this.sections.clear(); + this.dirty = true; + } } public TcfCaV1 getTcfCaV1Section() { @@ -333,11 +299,7 @@ public UsTn getUsTnSection() { } public List getSectionIds() { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); int length = Sections.SECTION_ORDER.size(); List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { @@ -350,7 +312,8 @@ public List getSectionIds() { return sectionIds; } - protected String encodeModel(Map> sections) { + @Override + protected CharSequence doEncode() { int length = Sections.SECTION_ORDER.size(); List encodedSections = new ArrayList<>(length); List sectionIds = new ArrayList<>(length); @@ -370,12 +333,13 @@ protected String encodeModel(Map> sections) { throw new EncodingException(e); } encodedSections.add(0, header.encodeCharSequence()); - return SlicedCharSequence.join('~', encodedSections).toString(); + return SlicedCharSequence.join('~', encodedSections); } - protected Map> decodeModel(String str) { - if (str == null || str.isEmpty() || str.startsWith("DB")) { - Map> sections = new HashMap<>(); + @Override + protected void doDecode(CharSequence str) { + if (str == null || str.isEmpty() || (str.charAt(0) == 'D' && str.charAt(1) == 'B')) { + sections.clear(); if(str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); @@ -447,11 +411,9 @@ protected Map> decodeModel(String str) { } } } - - return sections; - } else if (str.startsWith("C")) { + } else if (str.charAt(0) == 'C') { // old tcfeu only string - Map> sections = new HashMap<>(); + sections.clear(); TcfEuV2 section = new TcfEuV2(str); sections.put(TcfEuV2.NAME, section); @@ -460,7 +422,6 @@ protected Map> decodeModel(String str) { header.setFieldValue(HeaderV1Field.SECTION_IDS, Arrays.asList(2)); sections.put(HeaderV1.NAME, section); - return sections; } else { throw new DecodingException("Unable to decode '" + str + "'"); } @@ -471,11 +432,7 @@ public String encodeSection(int sectionId) { } public String encodeSection(String sectionName) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } + ensureDecode(); EncodableSection section = this.sections.get(sectionName); if (section != null) { return section.encode(); @@ -489,36 +446,15 @@ public void decodeSection(int sectionId, String encodedString) { } public void decodeSection(String sectionName, String encodedString) { - if (!this.decoded) { - this.sections = this.decodeModel(this.encodedString); - this.dirty = false; - this.decoded = true; - } - + ensureDecode(); EncodableSection section = getOrCreateSection(sectionName); if (section != null) { section.decode(encodedString); - this.dirty = true; } } - public String encode() { - if (this.encodedString == null || this.encodedString.isEmpty() || this.dirty) { - this.encodedString = encodeModel(this.sections); - this.dirty = false; - this.decoded = true; - } - - return this.encodedString; - } - - public void decode(String encodedString) { - this.encodedString = encodedString; - this.dirty = false; - this.decoded = false; - } - public String toString() { + ensureDecode(); List sectionIds = getSectionIds(); List pieces = new ArrayList<>(sectionIds.size()); for (Integer sectionId : sectionIds) { @@ -527,5 +463,33 @@ public String toString() { return pieces.toString(); } + @Override + public boolean isDirty() { + if (dirty) { + return true; + } + int length = Sections.SECTION_ORDER.size(); + for (int i = 0; i < length; i++) { + String sectionName = Sections.SECTION_ORDER.get(i); + EncodableSection section = this.sections.get(sectionName); + if (section != null && section.isDirty()) { + return true; + } + } + return false; + } + + @Override + public void setDirty(boolean dirty) { + this.dirty = dirty; + int length = Sections.SECTION_ORDER.size(); + for (int i = 0; i < length; i++) { + String sectionName = Sections.SECTION_ORDER.get(i); + EncodableSection section = this.sections.get(sectionName); + if (section != null) { + section.setDirty(true); + } + } + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java index d9ae02c9..ae1fc6bf 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java @@ -6,7 +6,7 @@ public abstract class AbstractEncodable implements Dirtyable { private CharSequence encodedString; - protected boolean decoded = true; + private boolean decoded = true; public final String encode() { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 2de0651e..00a28784 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -45,7 +45,8 @@ public final boolean hasField(String fieldName) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - if (segment.getField(fieldName) != null) { + E key = segment.resolveKey(fieldName); + if (key != null && segment.getField(key) != null) { return true; } } @@ -73,9 +74,12 @@ public final Object getFieldValue(String fieldName) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - DataType field = segment.getField(fieldName); - if (field != null) { - return field.getValue(); + E key = segment.resolveKey(fieldName); + if (key != null) { + DataType field = segment.getField(key); + if (field != null) { + return field.getValue(); + } } } @@ -103,10 +107,14 @@ public final void setFieldValue(String fieldName, Object value) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { EncodableSegment segment = segments.get(i); - DataType field = segment.getField(fieldName); - if(field != null) { - field.setValue(value); - return; + E key = segment.resolveKey(fieldName); + if (key != null) { + DataType field = segment.getField(key); + if (field != null) { + field.setValue(value); + hook(key); + return; + } } } @@ -122,6 +130,7 @@ public final void setFieldValue(E fieldName, Object value) { DataType field = segment.getField(fieldName); if(field != null) { field.setValue(value); + hook(fieldName); return; } } @@ -129,6 +138,10 @@ public final void setFieldValue(E fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } + protected void hook(E fieldName) { + + } + public final boolean isDirty() { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 0d8a14a3..5dd4c8e8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,10 +1,9 @@ package com.iab.gpp.encoder.section; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; -public abstract class EncodableSection & FieldKey> extends AbstractEncodable implements Dirtyable { +public abstract class EncodableSection & FieldKey> extends AbstractEncodable { public abstract int getId(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index b38cda74..3cb96ede 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -78,7 +78,6 @@ protected void doDecode(CharSequence encodedString) { @Override protected CharSequence doEncode() { - this.setFieldValue(TcfCaV1Field.LAST_UPDATED, Instant.now()); List encodedSegments = new ArrayList<>(segments.size()); encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -90,6 +89,16 @@ protected CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } + @Override + public void hook(TcfCaV1Field fieldName) { + if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { + Instant utcDateTime = Instant.now(); + + this.setFieldValue(TcfCaV1Field.CREATED, utcDateTime); + this.setFieldValue(TcfCaV1Field.LAST_UPDATED, utcDateTime); + } + } + public Instant getCreated() { return (Instant) this.getFieldValue(TcfCaV1Field.CREATED); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 9b78d14a..2235a966 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -83,7 +83,6 @@ public void doDecode(CharSequence encodedString) { @Override public CharSequence doEncode() { - this.setFieldValue(TcfEuV2Field.LAST_UPDATED, Instant.now()); List encodedSegments = new ArrayList<>(segments.size()); if (segments.size() >= 1) { encodedSegments.add(segments.get(0).encodeCharSequence()); @@ -107,6 +106,16 @@ public CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } + @Override + public void hook(TcfEuV2Field fieldName) { + if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { + Instant utcDateTime = Instant.now(); + + this.setFieldValue(TcfEuV2Field.CREATED, utcDateTime); + this.setFieldValue(TcfEuV2Field.LAST_UPDATED, utcDateTime); + } + } + public Instant getCreated() { return (Instant) this.getFieldValue(TcfEuV2Field.CREATED); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 8946ada8..e4743827 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -29,8 +29,8 @@ public final DataType getField(E fieldName) { return get(fieldName); } - public final DataType getField(String fieldName) { - return get(fieldNames.convertKey(fieldName)); + public final E resolveKey(String fieldName) { + return fieldNames.convertKey(fieldName); } protected void initialize(E key, T value) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 6cb4c220..9000c946 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,15 +1,14 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.datatype.encoder.Dirtyable; import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { + public abstract E resolveKey(String fieldName); + public abstract DataType getField(E fieldName); - public abstract DataType getField(String fieldName); - public abstract Object getFieldValue(E fieldName); public abstract void setFieldValue(E fieldName, Object value); From 09ef2d93ffc0a4dc53c1d5a9fb96d095fba7969e Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 20:25:28 -0500 Subject: [PATCH 30/49] clean up hierarchy --- .../src/main/java/com/iab/gpp/encoder/GppModel.java | 2 +- .../datatype/AbstractEncodableBitStringDataType.java | 2 +- .../main/java/com/iab/gpp/encoder/datatype/DataType.java | 8 ++++---- .../com/iab/gpp/encoder/datatype/EncodableDataType.java | 6 +++--- .../iab/gpp/encoder/datatype/UnencodableCharacter.java | 2 +- .../com/iab/gpp/encoder/datatype/UnencodableInteger.java | 2 +- .../gpp/encoder/{field => section}/AbstractEncodable.java | 2 +- .../com/iab/gpp/encoder/section/EncodableSection.java | 1 - .../com/iab/gpp/encoder/segment/EncodableSegment.java | 2 +- 9 files changed, 13 insertions(+), 14 deletions(-) rename iabgpp-encoder/src/main/java/com/iab/gpp/encoder/{field => section}/AbstractEncodable.java (96%) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 55d944f8..44c49003 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -9,9 +9,9 @@ import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; import com.iab.gpp.encoder.field.HeaderV1Field; +import com.iab.gpp.encoder.section.AbstractEncodable; import com.iab.gpp.encoder.section.EncodableSection; import com.iab.gpp.encoder.section.HeaderV1; import com.iab.gpp.encoder.section.Sections; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 76e38bc5..5199842c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -6,7 +6,7 @@ import com.iab.gpp.encoder.error.ValidationException; -public abstract class AbstractEncodableBitStringDataType implements EncodableDataType { +public abstract class AbstractEncodableBitStringDataType extends EncodableDataType { //this if for backwards compatibility with the newer fields protected boolean hardFailIfMissing = true; protected boolean dirty = false; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java index be85c17b..158ef48b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/DataType.java @@ -2,8 +2,8 @@ import com.iab.gpp.encoder.datatype.encoder.Dirtyable; -public interface DataType extends Dirtyable { - boolean hasValue(); - T getValue(); - void setValue(Object value); +public abstract class DataType implements Dirtyable { + public abstract boolean hasValue(); + public abstract T getValue(); + public abstract void setValue(Object value); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java index bab54fd5..ea214e10 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDataType.java @@ -3,8 +3,8 @@ import com.iab.gpp.encoder.bitstring.BitStringBuilder; import com.iab.gpp.encoder.bitstring.BitStringReader; -public interface EncodableDataType extends DataType { - void encode(BitStringBuilder builder); +public abstract class EncodableDataType extends DataType { + public abstract void encode(BitStringBuilder builder); - void decode(BitStringReader reader); + public abstract void decode(BitStringReader reader); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java index 4b1f84ee..8b0739fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableCharacter.java @@ -3,7 +3,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.error.ValidationException; -public final class UnencodableCharacter implements DataType { +public final class UnencodableCharacter extends DataType { private boolean dirty = false; private Predicate validator; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java index 1b40a247..8ffc7e02 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/UnencodableInteger.java @@ -3,7 +3,7 @@ import java.util.function.Predicate; import com.iab.gpp.encoder.error.ValidationException; -public final class UnencodableInteger implements DataType { +public final class UnencodableInteger extends DataType { private boolean dirty; private Predicate validator; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java similarity index 96% rename from iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java rename to iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index ae1fc6bf..0fb5d465 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -1,4 +1,4 @@ -package com.iab.gpp.encoder.field; +package com.iab.gpp.encoder.section; import com.iab.gpp.encoder.datatype.encoder.Dirtyable; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 5dd4c8e8..5572f625 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; public abstract class EncodableSection & FieldKey> extends AbstractEncodable { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index 9000c946..ecd8327c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -1,8 +1,8 @@ package com.iab.gpp.encoder.segment; import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.field.AbstractEncodable; import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.section.AbstractEncodable; public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { public abstract E resolveKey(String fieldName); From b9817bb48b22cb2e6ffd6b54fcb8d54b809d9716 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 20:43:38 -0500 Subject: [PATCH 31/49] style --- .../com/iab/gpp/encoder/field/FieldNames.java | 5 +- .../encoder/section/AbstractEncodable.java | 46 ++++++++++--------- .../AbstractLazilyEncodableSection.java | 25 +++++++--- .../com/iab/gpp/encoder/section/TcfCaV1.java | 2 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 2 +- .../AbstractLazilyEncodableSegment.java | 30 +++++++----- .../encoder/segment/TcfEuV2CoreSegment.java | 2 +- 7 files changed, 66 insertions(+), 46 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 960d1829..65fd99d1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -34,8 +34,9 @@ public Integer getIndex(E key) { } return indices[key.ordinal()]; } - - public E convertKey(String key) { + + public E resolveKey(String key) { return map.get(key); } + } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index 0fb5d465..7fc75676 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -4,42 +4,44 @@ public abstract class AbstractEncodable implements Dirtyable { - private CharSequence encodedString; + private CharSequence encoded; private boolean decoded = true; - - - public final String encode() { - return encodeCharSequence().toString(); + + private final boolean isEmpty() { + return encoded == null || encoded.length() == 0; } - - protected void ensureDecode() { + + protected final void ensureDecode() { if (!this.decoded) { - if(encodedString != null && encodedString.length() > 0) { - this.doDecode(this.encodedString); + if (!isEmpty()) { + this.doDecode(this.encoded); } this.setDirty(false); this.decoded = true; } } - - public final CharSequence encodeCharSequence() { - if (this.encodedString == null || this.encodedString.length() == 0 || this.isDirty()) { - this.encodedString = doEncode(); - this.setDirty(false); - this.decoded = true; - } - return this.encodedString; + public final void decode(CharSequence encodedString) { + this.encoded = encodedString; + this.decoded = false; } - protected abstract CharSequence doEncode(); - protected abstract void doDecode(CharSequence encodedString); - public final void decode(CharSequence encodedString) { - this.encodedString = encodedString; - this.decoded = false; + protected abstract CharSequence doEncode(); + + public final String encode() { + return encodeCharSequence().toString(); + } + + public final CharSequence encodeCharSequence() { + if (isEmpty() || this.isDirty()) { + this.encoded = doEncode(); + this.setDirty(false); + this.decoded = true; + } + return this.encoded; } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java index 00a28784..a6c574cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java @@ -15,6 +15,7 @@ protected AbstractLazilyEncodableSection(List> segments) { this.segments = segments; } + @Override protected void doDecode(CharSequence encodedString) { int numSegments = segments.size(); if (numSegments == 1) { @@ -27,6 +28,7 @@ protected void doDecode(CharSequence encodedString) { } } + @Override protected CharSequence doEncode() { int numSegments = segments.size(); if (numSegments == 1) { @@ -39,6 +41,7 @@ protected CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } + @Override public final boolean hasField(String fieldName) { ensureDecode(); @@ -53,7 +56,8 @@ public final boolean hasField(String fieldName) { return false; } - + + @Override public final boolean hasField(E fieldName) { ensureDecode(); @@ -68,6 +72,7 @@ public final boolean hasField(E fieldName) { return false; } + @Override public final Object getFieldValue(String fieldName) { ensureDecode(); @@ -85,7 +90,8 @@ public final Object getFieldValue(String fieldName) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - + + @Override public final Object getFieldValue(E fieldName) { ensureDecode(); @@ -101,6 +107,7 @@ public final Object getFieldValue(E fieldName) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } + @Override public final void setFieldValue(String fieldName, Object value) { ensureDecode(); @@ -112,7 +119,7 @@ public final void setFieldValue(String fieldName, Object value) { DataType field = segment.getField(key); if (field != null) { field.setValue(value); - hook(key); + onSet(key); return; } } @@ -120,7 +127,8 @@ public final void setFieldValue(String fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - + + @Override public final void setFieldValue(E fieldName, Object value) { ensureDecode(); @@ -130,7 +138,7 @@ public final void setFieldValue(E fieldName, Object value) { DataType field = segment.getField(fieldName); if(field != null) { field.setValue(value); - hook(fieldName); + onSet(fieldName); return; } } @@ -138,10 +146,11 @@ public final void setFieldValue(E fieldName, Object value) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - protected void hook(E fieldName) { - + protected void onSet(E fieldName) { + // pass: override this to set last modified fields } + @Override public final boolean isDirty() { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { @@ -152,6 +161,7 @@ public final boolean isDirty() { return false; } + @Override public final void setDirty(boolean dirty) { int numSegments = segments.size(); for (int i = 0; i < numSegments; i++) { @@ -159,6 +169,7 @@ public final void setDirty(boolean dirty) { } } + @Override public final String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 3cb96ede..7ecbeb75 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -90,7 +90,7 @@ protected CharSequence doEncode() { } @Override - public void hook(TcfCaV1Field fieldName) { + public void onSet(TcfCaV1Field fieldName) { if (!fieldName.equals(TcfCaV1Field.CREATED) && !fieldName.equals(TcfCaV1Field.LAST_UPDATED)) { Instant utcDateTime = Instant.now(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 2235a966..81690838 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -107,7 +107,7 @@ public CharSequence doEncode() { } @Override - public void hook(TcfEuV2Field fieldName) { + public void onSet(TcfEuV2Field fieldName) { if (!fieldName.equals(TcfEuV2Field.CREATED) && !fieldName.equals(TcfEuV2Field.LAST_UPDATED)) { Instant utcDateTime = Instant.now(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index e4743827..2b1c6ea4 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -23,17 +23,24 @@ abstract class AbstractLazilyEncodableSegment & FieldKey, T ex protected final FieldNames fieldNames; private final Object[] values; - + protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { + this.fieldNames = fieldNames; + this.values = new Object[fieldNames.size()]; + } + + + @Override public final DataType getField(E fieldName) { ensureDecode(); return get(fieldName); } - + + @Override public final E resolveKey(String fieldName) { - return fieldNames.convertKey(fieldName); + return fieldNames.resolveKey(fieldName); } - protected void initialize(E key, T value) { + protected final void initialize(E key, T value) { Integer index = fieldNames.getIndex(key); if (index == null) { throw new IllegalArgumentException("invalid key "+ key); @@ -42,11 +49,11 @@ protected void initialize(E key, T value) { } @SuppressWarnings("unchecked") - protected T get(int index) { + protected final T get(int index) { return (T) values[index]; } - protected T get(E key) { + protected final T get(E key) { Integer index = fieldNames.getIndex(key); if (index != null) { return get(index); @@ -54,6 +61,7 @@ protected T get(E key) { return null; } + @Override public final boolean isDirty() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { @@ -65,6 +73,7 @@ public final boolean isDirty() { return false; } + @Override public final void setDirty(boolean dirty) { int size = fieldNames.size(); for (int i = 0; i < size; i++) { @@ -75,12 +84,7 @@ public final void setDirty(boolean dirty) { } } - - protected AbstractLazilyEncodableSegment(FieldNames fieldNames) { - this.fieldNames = fieldNames; - this.values = new Object[fieldNames.size()]; - } - + @Override public Object getFieldValue(E fieldName) { ensureDecode(); @@ -92,6 +96,7 @@ public Object getFieldValue(E fieldName) { } } + @Override public void setFieldValue(E fieldName, Object value) { ensureDecode(); @@ -103,6 +108,7 @@ public void setFieldValue(E fieldName, Object value) { } } + @Override public String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java index 65e77b56..4c63d7c8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfEuV2CoreSegment.java @@ -17,7 +17,7 @@ public final class TcfEuV2CoreSegment extends AbstractBase64Segment Date: Thu, 22 Jan 2026 20:48:14 -0500 Subject: [PATCH 32/49] remove extra class --- .../AbstractLazilyEncodableSection.java | 183 ------------------ .../gpp/encoder/section/EncodableSection.java | 173 ++++++++++++++++- .../com/iab/gpp/encoder/section/HeaderV1.java | 2 +- .../com/iab/gpp/encoder/section/TcfCaV1.java | 2 +- .../com/iab/gpp/encoder/section/TcfEuV2.java | 2 +- .../com/iab/gpp/encoder/section/UsCa.java | 2 +- .../com/iab/gpp/encoder/section/UsCo.java | 2 +- .../com/iab/gpp/encoder/section/UsCt.java | 2 +- .../com/iab/gpp/encoder/section/UsDe.java | 2 +- .../com/iab/gpp/encoder/section/UsFl.java | 2 +- .../com/iab/gpp/encoder/section/UsIa.java | 2 +- .../com/iab/gpp/encoder/section/UsMt.java | 2 +- .../com/iab/gpp/encoder/section/UsNat.java | 2 +- .../com/iab/gpp/encoder/section/UsNe.java | 2 +- .../com/iab/gpp/encoder/section/UsNh.java | 2 +- .../com/iab/gpp/encoder/section/UsNj.java | 2 +- .../com/iab/gpp/encoder/section/UsOr.java | 2 +- .../com/iab/gpp/encoder/section/UsTn.java | 2 +- .../com/iab/gpp/encoder/section/UsTx.java | 2 +- .../com/iab/gpp/encoder/section/UsUt.java | 2 +- .../com/iab/gpp/encoder/section/UsVa.java | 2 +- .../com/iab/gpp/encoder/section/UspV1.java | 2 +- 22 files changed, 186 insertions(+), 210 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java deleted file mode 100644 index a6c574cb..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractLazilyEncodableSection.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.iab.gpp.encoder.section; - -import java.util.ArrayList; -import java.util.List; -import com.iab.gpp.encoder.datatype.DataType; -import com.iab.gpp.encoder.error.InvalidFieldException; -import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.segment.EncodableSegment; - -abstract class AbstractLazilyEncodableSection & FieldKey> extends EncodableSection { - - protected final List> segments; - - protected AbstractLazilyEncodableSection(List> segments) { - this.segments = segments; - } - - @Override - protected void doDecode(CharSequence encodedString) { - int numSegments = segments.size(); - if (numSegments == 1) { - segments.get(0).decode(encodedString); - return; - } - List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < numSegments; i++) { - segments.get(i).decode(encodedSegments.get(i)); - } - } - - @Override - protected CharSequence doEncode() { - int numSegments = segments.size(); - if (numSegments == 1) { - return segments.get(0).encodeCharSequence(); - } - List encodedSegments = new ArrayList<>(numSegments); - for (int i = 0; i < numSegments; i++) { - encodedSegments.add(segments.get(i).encodeCharSequence()); - } - return SlicedCharSequence.join('.', encodedSegments); - } - - @Override - public final boolean hasField(String fieldName) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - E key = segment.resolveKey(fieldName); - if (key != null && segment.getField(key) != null) { - return true; - } - } - - return false; - } - - @Override - public final boolean hasField(E fieldName) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - if (segment.getField(fieldName) != null) { - return true; - } - } - - return false; - } - - @Override - public final Object getFieldValue(String fieldName) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - E key = segment.resolveKey(fieldName); - if (key != null) { - DataType field = segment.getField(key); - if (field != null) { - return field.getValue(); - } - } - } - - throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); - } - - @Override - public final Object getFieldValue(E fieldName) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - DataType field = segment.getField(fieldName); - if (field != null) { - return field.getValue(); - } - } - - throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); - } - - @Override - public final void setFieldValue(String fieldName, Object value) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - E key = segment.resolveKey(fieldName); - if (key != null) { - DataType field = segment.getField(key); - if (field != null) { - field.setValue(value); - onSet(key); - return; - } - } - } - - throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); - } - - @Override - public final void setFieldValue(E fieldName, Object value) { - ensureDecode(); - - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); - DataType field = segment.getField(fieldName); - if(field != null) { - field.setValue(value); - onSet(fieldName); - return; - } - } - - throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); - } - - protected void onSet(E fieldName) { - // pass: override this to set last modified fields - } - - @Override - public final boolean isDirty() { - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - if (segments.get(i).isDirty()) { - return true; - } - } - return false; - } - - @Override - public final void setDirty(boolean dirty) { - int numSegments = segments.size(); - for (int i = 0; i < numSegments; i++) { - segments.get(i).setDirty(dirty); - } - } - - @Override - public final String toString() { - ensureDecode(); - StringBuilder sb = new StringBuilder(); - sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); - for (EncodableSegment segment : segments) { - sb.append(", ").append(segment.toString()); - } - sb.append('}'); - return sb.toString(); - } -} diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 5572f625..f13b1c44 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -1,25 +1,184 @@ package com.iab.gpp.encoder.section; +import java.util.ArrayList; +import java.util.List; +import com.iab.gpp.encoder.datatype.DataType; +import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; +import com.iab.gpp.encoder.segment.EncodableSegment; public abstract class EncodableSection & FieldKey> extends AbstractEncodable { + protected final List> segments; + + protected EncodableSection(List> segments) { + this.segments = segments; + } + public abstract int getId(); public abstract String getName(); public abstract int getVersion(); - public abstract boolean hasField(E fieldName); + @Override + protected void doDecode(CharSequence encodedString) { + int numSegments = segments.size(); + if (numSegments == 1) { + segments.get(0).decode(encodedString); + return; + } + List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + for (int i = 0; i < numSegments; i++) { + segments.get(i).decode(encodedSegments.get(i)); + } + } + + @Override + protected CharSequence doEncode() { + int numSegments = segments.size(); + if (numSegments == 1) { + return segments.get(0).encodeCharSequence(); + } + List encodedSegments = new ArrayList<>(numSegments); + for (int i = 0; i < numSegments; i++) { + encodedSegments.add(segments.get(i).encodeCharSequence()); + } + return SlicedCharSequence.join('.', encodedSegments); + } + + public final boolean hasField(String fieldName) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + E key = segment.resolveKey(fieldName); + if (key != null && segment.getField(key) != null) { + return true; + } + } + + return false; + } + + public final boolean hasField(E fieldName) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + if (segment.getField(fieldName) != null) { + return true; + } + } + + return false; + } + + public final Object getFieldValue(String fieldName) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + E key = segment.resolveKey(fieldName); + if (key != null) { + DataType field = segment.getField(key); + if (field != null) { + return field.getValue(); + } + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public final Object getFieldValue(E fieldName) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + DataType field = segment.getField(fieldName); + if (field != null) { + return field.getValue(); + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public final void setFieldValue(String fieldName, Object value) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + E key = segment.resolveKey(fieldName); + if (key != null) { + DataType field = segment.getField(key); + if (field != null) { + field.setValue(value); + onSet(key); + return; + } + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } + + public final void setFieldValue(E fieldName, Object value) { + ensureDecode(); + + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + EncodableSegment segment = segments.get(i); + DataType field = segment.getField(fieldName); + if(field != null) { + field.setValue(value); + onSet(fieldName); + return; + } + } + + throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); + } - public abstract Object getFieldValue(E fieldName); + protected void onSet(E fieldName) { + // pass: override this to set last modified fields + } - public abstract void setFieldValue(E fieldName, Object value); - - public abstract boolean hasField(String fieldName); + @Override + public final boolean isDirty() { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + if (segments.get(i).isDirty()) { + return true; + } + } + return false; + } - public abstract Object getFieldValue(String fieldName); + @Override + public final void setDirty(boolean dirty) { + int numSegments = segments.size(); + for (int i = 0; i < numSegments; i++) { + segments.get(i).setDirty(dirty); + } + } - public abstract void setFieldValue(String fieldName, Object value); + @Override + public final String toString() { + ensureDecode(); + StringBuilder sb = new StringBuilder(); + sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); + for (EncodableSegment segment : segments) { + sb.append(", ").append(segment.toString()); + } + sb.append('}'); + return sb.toString(); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 4d3742b4..6bcd8d55 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; -public class HeaderV1 extends AbstractLazilyEncodableSection { +public class HeaderV1 extends EncodableSection { public static final int ID = 3; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 7ecbeb75..bb461535 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -13,7 +13,7 @@ import com.iab.gpp.encoder.segment.TcfCaV1DisclosedVendorsSegment; import com.iab.gpp.encoder.segment.TcfCaV1PublisherPurposesSegment; -public class TcfCaV1 extends AbstractLazilyEncodableSection { +public class TcfCaV1 extends EncodableSection { public static final int ID = 5; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index 81690838..d953f315 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -14,7 +14,7 @@ import com.iab.gpp.encoder.segment.TcfEuV2VendorsAllowedSegment; import com.iab.gpp.encoder.segment.TcfEuV2VendorsDisclosedSegment; -public class TcfEuV2 extends AbstractLazilyEncodableSection { +public class TcfEuV2 extends EncodableSection { public static final int ID = 2; public static final int VERSION = 2; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index 601aa678..d5ab9d13 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCaCoreSegment; import com.iab.gpp.encoder.segment.UsCaGpcSegment; -public class UsCa extends AbstractLazilyEncodableSection { +public class UsCa extends EncodableSection { public static final int ID = 8; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index cfd6c7e2..89b8f8e2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCoCoreSegment; import com.iab.gpp.encoder.segment.UsCoGpcSegment; -public class UsCo extends AbstractLazilyEncodableSection { +public class UsCo extends EncodableSection { public static final int ID = 10; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 4957fefe..96a59d57 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsCtCoreSegment; import com.iab.gpp.encoder.segment.UsCtGpcSegment; -public class UsCt extends AbstractLazilyEncodableSection { +public class UsCt extends EncodableSection { public static final int ID = 12; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 3a839d9e..5e72b828 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsDeCoreSegment; import com.iab.gpp.encoder.segment.UsDeGpcSegment; -public class UsDe extends AbstractLazilyEncodableSection { +public class UsDe extends EncodableSection { public static final int ID = 17; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index 42b8922b..fc444871 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.segment.UsFlCoreSegment; -public class UsFl extends AbstractLazilyEncodableSection { +public class UsFl extends EncodableSection { public static final int ID = 13; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 4bf8085d..87e7a493 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsIaCoreSegment; import com.iab.gpp.encoder.segment.UsIaGpcSegment; -public class UsIa extends AbstractLazilyEncodableSection { +public class UsIa extends EncodableSection { public static final int ID = 18; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 89530be5..56ee980d 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsMtCoreSegment; import com.iab.gpp.encoder.segment.UsMtGpcSegment; -public class UsMt extends AbstractLazilyEncodableSection { +public class UsMt extends EncodableSection { public static final int ID = 14; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 3c1e0292..44e85cc7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNatCoreSegment; import com.iab.gpp.encoder.segment.UsNatGpcSegment; -public class UsNat extends AbstractLazilyEncodableSection { +public class UsNat extends EncodableSection { public static final int ID = 7; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 26c9208c..54fb595f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNeCoreSegment; import com.iab.gpp.encoder.segment.UsNeGpcSegment; -public class UsNe extends AbstractLazilyEncodableSection { +public class UsNe extends EncodableSection { public static final int ID = 19; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 3a706f94..4c29c10e 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNhCoreSegment; import com.iab.gpp.encoder.segment.UsNhGpcSegment; -public class UsNh extends AbstractLazilyEncodableSection { +public class UsNh extends EncodableSection { public static final int ID = 20; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index c530a4f0..a0731775 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsNjCoreSegment; import com.iab.gpp.encoder.segment.UsNjGpcSegment; -public class UsNj extends AbstractLazilyEncodableSection { +public class UsNj extends EncodableSection { public static final int ID = 21; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index c1f1fe66..edb73dbe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsOrCoreSegment; import com.iab.gpp.encoder.segment.UsOrGpcSegment; -public class UsOr extends AbstractLazilyEncodableSection { +public class UsOr extends EncodableSection { public static final int ID = 15; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index a56a29eb..32cd04fe 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsTnCoreSegment; import com.iab.gpp.encoder.segment.UsTnGpcSegment; -public class UsTn extends AbstractLazilyEncodableSection { +public class UsTn extends EncodableSection { public static final int ID = 22; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 4c2b3b0f..56ad82ad 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -9,7 +9,7 @@ import com.iab.gpp.encoder.segment.UsTxCoreSegment; import com.iab.gpp.encoder.segment.UsTxGpcSegment; -public class UsTx extends AbstractLazilyEncodableSection { +public class UsTx extends EncodableSection { public static final int ID = 16; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 52530473..9cd0fce8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.segment.UsUtCoreSegment; -public class UsUt extends AbstractLazilyEncodableSection { +public class UsUt extends EncodableSection { public static final int ID = 11; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 33b267ba..05fc17e2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.segment.UsVaCoreSegment; -public class UsVa extends AbstractLazilyEncodableSection { +public class UsVa extends EncodableSection { public static final int ID = 9; public static final int VERSION = 1; diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index fff8469c..e8f231be 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -4,7 +4,7 @@ import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.segment.UspV1CoreSegment; -public class UspV1 extends AbstractLazilyEncodableSection { +public class UspV1 extends EncodableSection { public static final int ID = 6; public static final int VERSION = 1; From 70c65efa2445812acd247410c110f71fc19185f8 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 21:11:26 -0500 Subject: [PATCH 33/49] use fieldkey --- .../java/com/iab/gpp/encoder/GppModel.java | 24 +- .../com/iab/gpp/encoder/field/FieldNames.java | 6 +- .../gpp/encoder/section/EncodableSection.java | 6 +- .../AbstractLazilyEncodableSegment.java | 2 +- .../gpp/encoder/segment/EncodableSegment.java | 2 +- .../encoder/segment/TcfCaV1CoreSegment.java | 2 +- .../com/iab/gpp/encoder/GppModelTest.java | 44 ++-- .../iab/gpp/encoder/section/HeaderV1Test.java | 25 +- .../iab/gpp/encoder/section/TcfEuV2Test.java | 230 +++++++++--------- .../iab/gpp/encoder/section/UspV1Test.java | 47 ++-- 10 files changed, 190 insertions(+), 198 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 44c49003..219a82d8 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -49,10 +49,6 @@ public GppModel(String encodedString) { } public void setFieldValue(int sectionId, FieldKey fieldName, Object value) { - setFieldValue(sectionId, fieldName.getName(), value); - } - - public void setFieldValue(int sectionId, String fieldName, Object value) { setFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName, value); } @@ -127,10 +123,6 @@ private EncodableSection getOrCreateSection(String sectionName) { } public void setFieldValue(String sectionName, FieldKey fieldName, Object value) { - setFieldValue(sectionName, fieldName.getName(), value); - } - - public void setFieldValue(String sectionName, String fieldName, Object value) { ensureDecode(); EncodableSection section = getOrCreateSection(sectionName); if (section != null) { @@ -141,18 +133,10 @@ public void setFieldValue(String sectionName, String fieldName, Object value) { } public Object getFieldValue(int sectionId, FieldKey fieldName) { - return getFieldValue(sectionId, fieldName.getName()); - } - - public Object getFieldValue(int sectionId, String fieldName) { return getFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); } public Object getFieldValue(String sectionName, FieldKey fieldName) { - return getFieldValue(sectionName, fieldName.getName()); - } - - public Object getFieldValue(String sectionName, String fieldName) { ensureDecode(); EncodableSection field = this.sections.get(sectionName); if (field != null) { @@ -162,11 +146,11 @@ public Object getFieldValue(String sectionName, String fieldName) { } } - public boolean hasField(int sectionId, String fieldName) { + public boolean hasField(int sectionId, FieldKey fieldName) { return hasField(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); } - public boolean hasField(String sectionName, String fieldName) { + public boolean hasField(String sectionName, FieldKey fieldName) { ensureDecode(); EncodableSection field = this.sections.get(sectionName); if (field != null) { @@ -189,7 +173,7 @@ public HeaderV1 getHeader() { ensureDecode(); HeaderV1 header = new HeaderV1(); try { - header.setFieldValue("SectionIds", this.getSectionIds()); + header.setFieldValue(HeaderV1Field.SECTION_IDS, this.getSectionIds()); } catch (InvalidFieldException e) { } @@ -328,7 +312,7 @@ protected CharSequence doEncode() { HeaderV1 header = new HeaderV1(); try { - header.setFieldValue("SectionIds", getSectionIds()); + header.setFieldValue(HeaderV1Field.SECTION_IDS, getSectionIds()); } catch (InvalidFieldException e) { throw new EncodingException(e); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java index 65fd99d1..69822878 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/field/FieldNames.java @@ -5,7 +5,7 @@ public final class FieldNames & FieldKey> { private final E[] keys; - private final LinkedHashMap map; + private final LinkedHashMap map; private final Integer[] indices; @SafeVarargs @@ -15,7 +15,7 @@ public final class FieldNames & FieldKey> { this.indices = new Integer[keys[0].getClass().getEnumConstants().length]; for (int i = 0; i < keys.length; i++) { E key = keys[i]; - this.map.put(key.getName(), key); + this.map.put(key, key); this.indices[key.ordinal()] = i; } } @@ -35,7 +35,7 @@ public Integer getIndex(E key) { return indices[key.ordinal()]; } - public E resolveKey(String key) { + public E resolveKey(FieldKey key) { return map.get(key); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index f13b1c44..72d3bf4a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -47,7 +47,7 @@ protected CharSequence doEncode() { return SlicedCharSequence.join('.', encodedSegments); } - public final boolean hasField(String fieldName) { + public final boolean hasField(FieldKey fieldName) { ensureDecode(); int numSegments = segments.size(); @@ -76,7 +76,7 @@ public final boolean hasField(E fieldName) { return false; } - public final Object getFieldValue(String fieldName) { + public final Object getFieldValue(FieldKey fieldName) { ensureDecode(); int numSegments = segments.size(); @@ -109,7 +109,7 @@ public final Object getFieldValue(E fieldName) { throw new InvalidFieldException("Invalid field: '" + fieldName + "'"); } - public final void setFieldValue(String fieldName, Object value) { + public final void setFieldValue(FieldKey fieldName, Object value) { ensureDecode(); int numSegments = segments.size(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 2b1c6ea4..439326ed 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -36,7 +36,7 @@ public final DataType getField(E fieldName) { } @Override - public final E resolveKey(String fieldName) { + public final E resolveKey(FieldKey fieldName) { return fieldNames.resolveKey(fieldName); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java index ecd8327c..00bfdfdd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/EncodableSegment.java @@ -5,7 +5,7 @@ import com.iab.gpp.encoder.section.AbstractEncodable; public abstract class EncodableSegment & FieldKey> extends AbstractEncodable { - public abstract E resolveKey(String fieldName); + public abstract E resolveKey(FieldKey fieldName); public abstract DataType getField(E fieldName); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java index fb0151f9..6be9b664 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/TcfCaV1CoreSegment.java @@ -15,7 +15,7 @@ public final class TcfCaV1CoreSegment extends AbstractBase64Segment()); + headerV1.setFieldValue(HeaderV1Field.SECTION_IDS, new ArrayList<>()); Assertions.assertEquals("DBAA", headerV1.encode()); } @Test public void testEncode2() { HeaderV1 headerV1 = new HeaderV1(); - headerV1.setFieldValue("SectionIds", Arrays.asList(2)); + headerV1.setFieldValue(HeaderV1Field.SECTION_IDS, Arrays.asList(2)); Assertions.assertEquals("DBABMA", headerV1.encode()); } @Test public void testEncode3() { HeaderV1 headerV1 = new HeaderV1(); - headerV1.setFieldValue("SectionIds", Arrays.asList(2, 6)); + headerV1.setFieldValue(HeaderV1Field.SECTION_IDS, Arrays.asList(2, 6)); Assertions.assertEquals("DBACNYA", headerV1.encode()); } @@ -34,27 +35,27 @@ public void testEncode3() { public void testDecode1() { HeaderV1 headerV1 = new HeaderV1(); headerV1.decode("DBAA"); - Assertions.assertEquals(Set.of(), headerV1.getFieldValue("SectionIds")); - Assertions.assertEquals(headerV1.getFieldValue("Version"), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue("SectionIds"), headerV1.getSectionsIds()); + Assertions.assertEquals(Set.of(), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test public void testDecode2() { HeaderV1 headerV1 = new HeaderV1(); headerV1.decode("DBABMA"); - Assertions.assertEquals(Set.of(2), headerV1.getFieldValue("SectionIds")); - Assertions.assertEquals(headerV1.getFieldValue("Version"), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue("SectionIds"), headerV1.getSectionsIds()); + Assertions.assertEquals(Set.of(2), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test public void testDecode3() { HeaderV1 headerV1 = new HeaderV1(); headerV1.decode("DBACNYA"); - Assertions.assertEquals(Set.of(2, 6), headerV1.getFieldValue("SectionIds")); - Assertions.assertEquals(headerV1.getFieldValue("Version"), headerV1.getVersion()); - Assertions.assertEquals(headerV1.getFieldValue("SectionIds"), headerV1.getSectionsIds()); + Assertions.assertEquals(Set.of(2, 6), headerV1.getFieldValue(HeaderV1Field.SECTION_IDS)); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.VERSION), headerV1.getVersion()); + Assertions.assertEquals(headerV1.getFieldValue(HeaderV1Field.SECTION_IDS), headerV1.getSectionsIds()); } @Test() diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java index 94bf7ba3..dda55beb 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/TcfEuV2Test.java @@ -148,22 +148,22 @@ public void testDecode3() { "CPcqBNJPcqBNJNwAAAENAwCAAAAAAAAAAAAAAAAAAAAA.YAAAAAAAAAA.QGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g.IGLtV_T9fb2vj-_Z99_tkeYwf95y3p-wzhheMs-8NyZeH_B4Wv2MyvBX4JiQKGRgksjLBAQdtHGlcTQgBwIlViTLMYk2MjzNKJrJEilsbO2dYGD9Pn8HT3ZCY70-vv__7v3ff_3g"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals(880, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(0, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(0, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(48, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("AA", tcfEuV2.getFieldValue("PublisherCountryCode")); - - Assertions.assertEquals(3, tcfEuV2.getFieldValue("PublisherPurposesSegmentType")); - - Assertions.assertEquals(2, tcfEuV2.getFieldValue("VendorsAllowedSegmentType")); - List vendorsAllowed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue("VendorsAllowed")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals(880, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(48, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("AA", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); + + Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE)); + + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE)); + List vendorsAllowed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED)); Assertions.assertEquals(434, vendorsAllowed.size()); Assertions.assertEquals(1, vendorsAllowed.get(0)); Assertions.assertEquals(2, vendorsAllowed.get(1)); @@ -185,8 +185,8 @@ public void testDecode3() { Assertions.assertEquals(790, vendorsAllowed.get(vendorsAllowed.size() - 2)); Assertions.assertEquals(791, vendorsAllowed.get(vendorsAllowed.size() - 1)); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("VendorsDisclosedSegmentType")); - List vendorsDisclosed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue("VendorsDisclosed")); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE)); + List vendorsDisclosed = new ArrayList<>((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED)); Assertions.assertEquals(434, vendorsDisclosed.size()); Assertions.assertEquals(1, vendorsDisclosed.get(0)); Assertions.assertEquals(2, vendorsDisclosed.get(1)); @@ -208,40 +208,40 @@ public void testDecode3() { Assertions.assertEquals(790, vendorsDisclosed.get(vendorsDisclosed.size() - 2)); Assertions.assertEquals(791, vendorsDisclosed.get(vendorsDisclosed.size() - 1)); - Assertions.assertEquals(tcfEuV2.getFieldValue("Version"), tcfEuV2.getVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue("Created"), tcfEuV2.getCreated()); - Assertions.assertEquals(tcfEuV2.getFieldValue("LastUpdated"), tcfEuV2.getLastUpdated()); - Assertions.assertEquals(tcfEuV2.getFieldValue("CmpId"), tcfEuV2.getCmpId()); - Assertions.assertEquals(tcfEuV2.getFieldValue("CmpVersion"), tcfEuV2.getCmpVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue("ConsentScreen"), tcfEuV2.getConsentScreen()); - Assertions.assertEquals(tcfEuV2.getFieldValue("ConsentLanguage"), tcfEuV2.getConsentLanguage()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorListVersion"), tcfEuV2.getVendorListVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PolicyVersion"), tcfEuV2.getPolicyVersion()); - Assertions.assertEquals(tcfEuV2.getFieldValue("IsServiceSpecific"), tcfEuV2.getIsServiceSpecific()); - Assertions.assertEquals(tcfEuV2.getFieldValue("UseNonStandardStacks"), tcfEuV2.getUseNonStandardStacks()); - Assertions.assertEquals(tcfEuV2.getFieldValue("SpecialFeatureOptins"), tcfEuV2.getSpecialFeatureOptins()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PurposeConsents"), tcfEuV2.getPurposeConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PurposeLegitimateInterests"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VERSION), tcfEuV2.getVersion()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CREATED), tcfEuV2.getCreated()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED), tcfEuV2.getLastUpdated()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID), tcfEuV2.getCmpId()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION), tcfEuV2.getCmpVersion()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN), tcfEuV2.getConsentScreen()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE), tcfEuV2.getConsentLanguage()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION), tcfEuV2.getVendorListVersion()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION), tcfEuV2.getPolicyVersion()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC), tcfEuV2.getIsServiceSpecific()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS), tcfEuV2.getUseNonStandardStacks()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS), tcfEuV2.getSpecialFeatureOptins()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS), tcfEuV2.getPurposeConsents()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS), tcfEuV2.getPurposeLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PurposeOneTreatment"), tcfEuV2.getPurposeOneTreatment()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherCountryCode"), tcfEuV2.getPublisherCountryCode()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorConsents"), tcfEuV2.getVendorConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorLegitimateInterests"), tcfEuV2.getVendorLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherRestrictions"), tcfEuV2.getPublisherRestrictions()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherPurposesSegmentType"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT), tcfEuV2.getPurposeOneTreatment()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE), tcfEuV2.getPublisherCountryCode()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS), tcfEuV2.getVendorConsents()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS), tcfEuV2.getVendorLegitimateInterests()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS), tcfEuV2.getPublisherRestrictions()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_PURPOSES_SEGMENT_TYPE), tcfEuV2.getPublisherPurposesSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherConsents"), tcfEuV2.getPublisherConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherLegitimateInterests"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CONSENTS), tcfEuV2.getPublisherConsents()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_LEGITIMATE_INTERESTS), tcfEuV2.getPublisherLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue("NumCustomPurposes"), tcfEuV2.getNumCustomPurposes()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherCustomConsents"), tcfEuV2.getPublisherCustomConsents()); - Assertions.assertEquals(tcfEuV2.getFieldValue("PublisherCustomLegitimateInterests"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.NUM_CUSTOM_PURPOSES), tcfEuV2.getNumCustomPurposes()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_CONSENTS), tcfEuV2.getPublisherCustomConsents()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_CUSTOM_LEGITIMATE_INTERESTS), tcfEuV2.getPublisherCustomLegitimateInterests()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorsAllowedSegmentType"), tcfEuV2.getVendorsAllowedSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorsAllowed"), tcfEuV2.getVendorsAllowed()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorsDisclosedSegmentType"), + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED_SEGMENT_TYPE), tcfEuV2.getVendorsAllowedSegmentType()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_ALLOWED), tcfEuV2.getVendorsAllowed()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED_SEGMENT_TYPE), tcfEuV2.getVendorsDisclosedSegmentType()); - Assertions.assertEquals(tcfEuV2.getFieldValue("VendorsDisclosed"), tcfEuV2.getVendorsDisclosed()); + Assertions.assertEquals(tcfEuV2.getFieldValue(TcfEuV2Field.VENDORS_DISCLOSED), tcfEuV2.getVendorsDisclosed()); } @Test @@ -249,33 +249,33 @@ public void testDecode4() { TcfEuV2 tcfEuV2 = new TcfEuV2( "CPi8wgAPi8wgAAOACBENCuCoAP_AAEfAACiQJHNd_H__bX9n-f7_6ft0eY1f9_r37uQzDhfNk-8F3L_W_LwX_2E7NF36tq4KmR4ku1LBIUNtHMnUDUmxaokVrzHsak2cpzNKJ_BkknsZe2dYGF9vm5tj-QKZ7_5_d3f52T_9_9v-39z33913v3d93-_13LjdV5_9H_v9fR_b8_Kf9_5-_4v8_____3_e______8AEEggCTDVuIAuxLHAm0DCKBECMKwkKoFABBQDC0QGADg4KdlYBPrCBAAgFAEYEQIcAUYEAgAAAgCQiACQIsEAAAIgEAAIAEQiEABAwCCgAsDAIAAQDQMUQoABAkIMiAiKUwICIEggJbKhBKC6Q0wgCrLACgkRsFAAiAAAUgACAsHAMESAlYsECTFG-QAjBCgFEqFaAGGgAwABBI4RABgACCRwqADAAEEjgA"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals(14, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(174, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(true, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(174, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); Assertions.assertEquals( Set.of(1), - tcfEuV2.getFieldValue("SpecialFeatureOptins")); + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions .assertEquals( Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeConsents")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("US", tcfEuV2.getFieldValue("PublisherCountryCode")); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(772, ((IntegerSet) tcfEuV2.getFieldValue("VendorConsents")).size()); + Assertions.assertEquals(772, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); - Assertions.assertEquals(280, ((IntegerSet) tcfEuV2.getFieldValue("VendorLegitimateInterests")).size()); + Assertions.assertEquals(280, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); } @Test @@ -283,67 +283,67 @@ public void testDecode5() { TcfEuV2 tcfEuV2 = new TcfEuV2( "CPgA5EAPgA5EAAOACBENCuCoAP_AAEfAACiQI0Nd_H__bX9n-f7_6Pt0cY1f9_r3ruQzDhfFk-8F3L_W3LwX32E7NF36pq4KmR4ku1LBIQFtHMnUDUmxaokVrzHsak2cpyNKI7BkknsZe2dYGF9Pm5lD-QKZ7_5_d3f52T_9_9v-39z339V3v3d93-_12PjdV599H_v9fR_b8_Kf9_5-_4v8___4IQAAAAQQ_AJMNW4gC7EscCbQMIoAQIwrCQqAUAEFAMLRAYAODgpmVgEusIEACAUARgRAhxBRgQCAAACAJCIAJAiwQAIAiAQAAgARAIQAEDAIKACwMAgABANAxACgAECQgyICIpTAgIgSCAlsqEEoKpDTCAKssAKARGwUACIAABSAAICwcAwRICViwQJMUbwAw0AGAAIJHCIAMAAQSOFQAYAAgkcA"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals(14, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(174, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(true, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(174, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); Assertions.assertEquals( Set.of(1), - tcfEuV2.getFieldValue("SpecialFeatureOptins")); + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions .assertEquals( Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeConsents")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("US", tcfEuV2.getFieldValue("PublisherCountryCode")); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(693, ((IntegerSet) tcfEuV2.getFieldValue("VendorConsents")).size()); + Assertions.assertEquals(693, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)).size()); - Assertions.assertEquals(254, ((IntegerSet) tcfEuV2.getFieldValue("VendorLegitimateInterests")).size()); + Assertions.assertEquals(254, ((IntegerSet) tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)).size()); } @Test public void testDecode6() { TcfEuV2 tcfEuV2 = new TcfEuV2("COv_eg6Ov_eg6AOADBENAaCgAP_AAH_AACiQAVEUQQoAIQAqIoghAAQgAA.YAAAAAAAAAAAAAAAAAA"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals(14, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(3, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(26, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(true, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals(14, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(3, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(26, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); Assertions.assertEquals( Set.of(), - tcfEuV2.getFieldValue("SpecialFeatureOptins")); + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions .assertEquals( Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeConsents")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 3, 4, 5, 6, 7, 8, 9, 10), - tcfEuV2.getFieldValue("PurposeLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("US", tcfEuV2.getFieldValue("PublisherCountryCode")); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("US", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 25, 37, 42), tcfEuV2.getFieldValue("VendorConsents")); + Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 25, 37, 42), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); Assertions.assertEquals(Set.of(2, 6, 8, 12, 18, 23, 37, 42), - tcfEuV2.getFieldValue("VendorLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)); } @SuppressWarnings("unchecked") @@ -351,38 +351,38 @@ public void testDecode6() { public void testDecode7() throws DecodingException { TcfEuV2 tcfEuV2 = new TcfEuV2("COoC-kUOoC-kUAHABAENAwCoAIAAAELAAAwIF5wAoAAgAGAvMACX_ABBAAQAFA"); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("Version")); - Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue("Created").toString()); - Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue("LastUpdated").toString()); - Assertions.assertEquals(7, tcfEuV2.getFieldValue("CmpId")); - Assertions.assertEquals(1, tcfEuV2.getFieldValue("CmpVersion")); - Assertions.assertEquals(0, tcfEuV2.getFieldValue("ConsentScreen")); - Assertions.assertEquals("EN", tcfEuV2.getFieldValue("ConsentLanguage")); - Assertions.assertEquals(48, tcfEuV2.getFieldValue("VendorListVersion")); - Assertions.assertEquals(2, tcfEuV2.getFieldValue("PolicyVersion")); - Assertions.assertEquals(true, tcfEuV2.getFieldValue("IsServiceSpecific")); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("UseNonStandardStacks")); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.VERSION)); + Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.CREATED).toString()); + Assertions.assertEquals("2019-10-07T05:17:54Z", tcfEuV2.getFieldValue(TcfEuV2Field.LAST_UPDATED).toString()); + Assertions.assertEquals(7, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_ID)); + Assertions.assertEquals(1, tcfEuV2.getFieldValue(TcfEuV2Field.CMP_VERSION)); + Assertions.assertEquals(0, tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_SCREEN)); + Assertions.assertEquals("EN", tcfEuV2.getFieldValue(TcfEuV2Field.CONSENT_LANGUAGE)); + Assertions.assertEquals(48, tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LIST_VERSION)); + Assertions.assertEquals(2, tcfEuV2.getFieldValue(TcfEuV2Field.POLICY_VERSION)); + Assertions.assertEquals(true, tcfEuV2.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC)); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.USE_NON_STANDARD_STACKS)); Assertions.assertEquals( Set.of(1), - tcfEuV2.getFieldValue("SpecialFeatureOptins")); + tcfEuV2.getFieldValue(TcfEuV2Field.SPECIAL_FEATURE_OPTINS)); Assertions.assertEquals( Set.of(1), - tcfEuV2.getFieldValue("PurposeConsents")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_CONSENTS)); Assertions.assertEquals( Set.of(2, 7, 9, 10), - tcfEuV2.getFieldValue("PurposeLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(false, tcfEuV2.getFieldValue("PurposeOneTreatment")); - Assertions.assertEquals("GB", tcfEuV2.getFieldValue("PublisherCountryCode")); + Assertions.assertEquals(false, tcfEuV2.getFieldValue(TcfEuV2Field.PURPOSE_ONE_TREATMENT)); + Assertions.assertEquals("GB", tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_COUNTRY_CODE)); - Assertions.assertEquals(Set.of(1, 2, 3, 755), tcfEuV2.getFieldValue("VendorConsents")); + Assertions.assertEquals(Set.of(1, 2, 3, 755), tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_CONSENTS)); Assertions.assertEquals(Set.of(1, 2, 3, 4, 5, 6, 7, 8, 9), - tcfEuV2.getFieldValue("VendorLegitimateInterests")); + tcfEuV2.getFieldValue(TcfEuV2Field.VENDOR_LEGITIMATE_INTERESTS)); - Assertions.assertEquals(1, ((List)tcfEuV2.getFieldValue("PublisherRestrictions")).size()); - RangeEntry rangeEntry = ((List)tcfEuV2.getFieldValue("PublisherRestrictions")).get(0); + Assertions.assertEquals(1, ((List)tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).size()); + RangeEntry rangeEntry = ((List)tcfEuV2.getFieldValue(TcfEuV2Field.PUBLISHER_RESTRICTIONS)).get(0); Assertions.assertEquals(1, rangeEntry.getKey()); Assertions.assertEquals(0, rangeEntry.getType()); Assertions.assertEquals(Set.of(10), rangeEntry.getIds()); diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java index ffc7e741..126b9b57 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/section/UspV1Test.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.Test; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.InvalidFieldException; +import com.iab.gpp.encoder.field.UspV1Field; public class UspV1Test { @@ -16,9 +17,9 @@ public void testEncode1() { @Test public void testEncode2() { UspV1 uspv1 = new UspV1(); - uspv1.setFieldValue("Notice", 'Y'); - uspv1.setFieldValue("OptOutSale", 'N'); - uspv1.setFieldValue("LspaCovered", 'N'); + uspv1.setFieldValue(UspV1Field.NOTICE, 'Y'); + uspv1.setFieldValue(UspV1Field.OPT_OUT_SALE, 'N'); + uspv1.setFieldValue(UspV1Field.LSPA_COVERED, 'N'); Assertions.assertEquals("1YNN", uspv1.encode()); } @@ -26,10 +27,10 @@ public void testEncode2() { @Test public void testEncode3() { UspV1 uspv1 = new UspV1(); - uspv1.setFieldValue("Version", 2); - uspv1.setFieldValue("Notice", 'N'); - uspv1.setFieldValue("OptOutSale", 'Y'); - uspv1.setFieldValue("LspaCovered", 'Y'); + uspv1.setFieldValue(UspV1Field.VERSION, 2); + uspv1.setFieldValue(UspV1Field.NOTICE, 'N'); + uspv1.setFieldValue(UspV1Field.OPT_OUT_SALE, 'Y'); + uspv1.setFieldValue(UspV1Field.LSPA_COVERED, 'Y'); Assertions.assertEquals("2NYY", uspv1.encode()); } @@ -37,29 +38,29 @@ public void testEncode3() { @Test public void testDecode1() throws DecodingException, InvalidFieldException { UspV1 uspv1 = new UspV1("1NYN"); - Assertions.assertEquals(1, uspv1.getFieldValue("Version")); - Assertions.assertEquals('N', uspv1.getFieldValue("Notice")); - Assertions.assertEquals('Y', uspv1.getFieldValue("OptOutSale")); - Assertions.assertEquals('N', uspv1.getFieldValue("LspaCovered")); + Assertions.assertEquals(1, uspv1.getFieldValue(UspV1Field.VERSION)); + Assertions.assertEquals('N', uspv1.getFieldValue(UspV1Field.NOTICE)); + Assertions.assertEquals('Y', uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE)); + Assertions.assertEquals('N', uspv1.getFieldValue(UspV1Field.LSPA_COVERED)); - Assertions.assertEquals(uspv1.getFieldValue("Version"), uspv1.getVersion()); - Assertions.assertEquals(uspv1.getFieldValue("Notice"), uspv1.getNotice()); - Assertions.assertEquals(uspv1.getFieldValue("OptOutSale"), uspv1.getOptOutSale()); - Assertions.assertEquals(uspv1.getFieldValue("LspaCovered"), uspv1.getLspaCovered()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.VERSION), uspv1.getVersion()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.NOTICE), uspv1.getNotice()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE), uspv1.getOptOutSale()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.LSPA_COVERED), uspv1.getLspaCovered()); } @Test public void testDecode2() throws DecodingException, InvalidFieldException { UspV1 uspv1 = new UspV1("1YNY"); - Assertions.assertEquals(1, uspv1.getFieldValue("Version")); - Assertions.assertEquals('Y', uspv1.getFieldValue("Notice")); - Assertions.assertEquals('N', uspv1.getFieldValue("OptOutSale")); - Assertions.assertEquals('Y', uspv1.getFieldValue("LspaCovered")); + Assertions.assertEquals(1, uspv1.getFieldValue(UspV1Field.VERSION)); + Assertions.assertEquals('Y', uspv1.getFieldValue(UspV1Field.NOTICE)); + Assertions.assertEquals('N', uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE)); + Assertions.assertEquals('Y', uspv1.getFieldValue(UspV1Field.LSPA_COVERED)); - Assertions.assertEquals(uspv1.getFieldValue("Version"), uspv1.getVersion()); - Assertions.assertEquals(uspv1.getFieldValue("Notice"), uspv1.getNotice()); - Assertions.assertEquals(uspv1.getFieldValue("OptOutSale"), uspv1.getOptOutSale()); - Assertions.assertEquals(uspv1.getFieldValue("LspaCovered"), uspv1.getLspaCovered()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.VERSION), uspv1.getVersion()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.NOTICE), uspv1.getNotice()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.OPT_OUT_SALE), uspv1.getOptOutSale()); + Assertions.assertEquals(uspv1.getFieldValue(UspV1Field.LSPA_COVERED), uspv1.getLspaCovered()); } } From 3f5f9c8ba3fcfee143c7f3377106817ca0a88dbc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Thu, 22 Jan 2026 21:27:02 -0500 Subject: [PATCH 34/49] toString --- .../encoder/datatype/AbstractEncodableBitStringDataType.java | 4 ++++ .../gpp/encoder/segment/AbstractLazilyEncodableSegment.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 5199842c..78abff3c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -58,4 +58,8 @@ public boolean isDirty() { public void setDirty(boolean dirty) { this.dirty = dirty; } + + public String toString() { + return String.valueOf(value); + } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java index 439326ed..81372e59 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/segment/AbstractLazilyEncodableSegment.java @@ -116,7 +116,7 @@ public String toString() { int size = fieldNames.size(); for (int i = 0; i < size; i++) { E field = fieldNames.get(i); - sb.append(", ").append(field).append('=').append(get(field)); + sb.append(", ").append(field.getName()).append('=').append(get(field)); } sb.append('}'); return sb.toString(); From f9e14b0d0e3c8d31bedc83e19774f5d51cfec36f Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 23 Jan 2026 20:14:37 -0500 Subject: [PATCH 35/49] user headers to store state --- .../java/com/iab/gpp/encoder/GppModel.java | 41 +++++++------------ .../encoder/section/AbstractEncodable.java | 1 + .../com/iab/gpp/encoder/GppModelTest.java | 2 +- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 219a82d8..de7cc9ba 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.PrimitiveIterator; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; @@ -38,13 +39,14 @@ public class GppModel extends AbstractEncodable { private final Map> sections = new HashMap<>(); - private boolean dirty = false; - + private final HeaderV1 header; public GppModel() { + this.header = new HeaderV1(); } public GppModel(String encodedString) { + this(); decode(encodedString); } @@ -116,7 +118,7 @@ private EncodableSection getOrCreateSection(String sectionName) { } if (section != null) { this.sections.put(sectionName, section); - this.dirty = true; + this.header.getSectionsIds().add(section.getId()); } } return section; @@ -171,7 +173,6 @@ public boolean hasSection(String sectionName) { public HeaderV1 getHeader() { ensureDecode(); - HeaderV1 header = new HeaderV1(); try { header.setFieldValue(HeaderV1Field.SECTION_IDS, this.getSectionIds()); } catch (InvalidFieldException e) { @@ -194,15 +195,16 @@ public void deleteSection(int sectionId) { } public void deleteSection(String sectionName) { - if (this.sections.remove(sectionName) != null) { - this.dirty = true; + EncodableSection removed = this.sections.remove(sectionName); + if (removed != null) { + this.header.getSectionsIds().remove(removed.getId()); } } public void clear() { if (!this.sections.isEmpty()) { this.sections.clear(); - this.dirty = true; + this.header.getSectionsIds().clear(); } } @@ -300,6 +302,7 @@ public List getSectionIds() { protected CharSequence doEncode() { int length = Sections.SECTION_ORDER.size(); List encodedSections = new ArrayList<>(length); + encodedSections.add(header.encodeCharSequence()); List sectionIds = new ArrayList<>(length); for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); @@ -309,14 +312,6 @@ protected CharSequence doEncode() { sectionIds.add(section.getId()); } } - - HeaderV1 header = new HeaderV1(); - try { - header.setFieldValue(HeaderV1Field.SECTION_IDS, getSectionIds()); - } catch (InvalidFieldException e) { - throw new EncodingException(e); - } - encodedSections.add(0, header.encodeCharSequence()); return SlicedCharSequence.join('~', encodedSections); } @@ -324,11 +319,11 @@ protected CharSequence doEncode() { protected void doDecode(CharSequence str) { if (str == null || str.isEmpty() || (str.charAt(0) == 'D' && str.charAt(1) == 'B')) { sections.clear(); + header.getSectionsIds().clear(); if(str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); - HeaderV1 header = new HeaderV1(encodedSections.get(0)); - sections.put(HeaderV1.NAME, header); + header.decode(encodedSections.get(0)); PrimitiveIterator.OfInt it = header.getSectionsIds().iterator(); int i = 1; @@ -397,15 +392,9 @@ protected void doDecode(CharSequence str) { } } else if (str.charAt(0) == 'C') { // old tcfeu only string - sections.clear(); - TcfEuV2 section = new TcfEuV2(str); sections.put(TcfEuV2.NAME, section); - - HeaderV1 header = new HeaderV1(); - header.setFieldValue(HeaderV1Field.SECTION_IDS, Arrays.asList(2)); - sections.put(HeaderV1.NAME, section); - + header.getSectionsIds().add(section.getId()); } else { throw new DecodingException("Unable to decode '" + str + "'"); } @@ -449,7 +438,7 @@ public String toString() { @Override public boolean isDirty() { - if (dirty) { + if (header.isDirty()) { return true; } int length = Sections.SECTION_ORDER.size(); @@ -465,7 +454,7 @@ public boolean isDirty() { @Override public void setDirty(boolean dirty) { - this.dirty = dirty; + header.setDirty(dirty); int length = Sections.SECTION_ORDER.size(); for (int i = 0; i < length; i++) { String sectionName = Sections.SECTION_ORDER.get(i); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java index 7fc75676..231264cb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/AbstractEncodable.java @@ -24,6 +24,7 @@ protected final void ensureDecode() { public final void decode(CharSequence encodedString) { this.encoded = encodedString; + this.setDirty(false); this.decoded = false; } diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java index 7ae955d6..71aa195c 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/GppModelTest.java @@ -815,7 +815,7 @@ public void testDecodingEmptyString() { GppModel gppModel = new GppModel("DBABTA~1---"); Assertions.assertEquals("DBABTA~1---", gppModel.encode()); - gppModel.decode(null); + gppModel.decode(""); Assertions.assertEquals("DBAA", gppModel.encode()); gppModel.setFieldValue("uspv1", UspV1Field.NOTICE, 'Y'); From 7639aafcf5b6821b44f9d91cc33ca2b586b1be09 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 23 Jan 2026 20:53:11 -0500 Subject: [PATCH 36/49] clean up registry of sections --- .../java/com/iab/gpp/encoder/GppModel.java | 292 ++++++------------ .../com/iab/gpp/encoder/section/Sections.java | 42 --- 2 files changed, 96 insertions(+), 238 deletions(-) delete mode 100644 iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index de7cc9ba..e5676edb 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -1,21 +1,16 @@ package com.iab.gpp.encoder; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.PrimitiveIterator; -import com.iab.gpp.encoder.datatype.encoder.IntegerSet; +import java.util.function.Supplier; import com.iab.gpp.encoder.error.DecodingException; -import com.iab.gpp.encoder.error.EncodingException; import com.iab.gpp.encoder.error.InvalidFieldException; import com.iab.gpp.encoder.field.FieldKey; -import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.section.AbstractEncodable; import com.iab.gpp.encoder.section.EncodableSection; import com.iab.gpp.encoder.section.HeaderV1; -import com.iab.gpp.encoder.section.Sections; import com.iab.gpp.encoder.section.SlicedCharSequence; import com.iab.gpp.encoder.section.TcfCaV1; import com.iab.gpp.encoder.section.TcfEuV2; @@ -38,7 +33,44 @@ import com.iab.gpp.encoder.section.UspV1; public class GppModel extends AbstractEncodable { - private final Map> sections = new HashMap<>(); + + private static final HashMap>> SECTION_ID_TO_CONSTRUCTOR = new HashMap<>(); + private static final HashMap SECTION_NAME_TO_ID = new HashMap<>(); + + static { + + List>> constructors = new ArrayList<>(); + + // register section constructors here + constructors.add(TcfEuV2::new); + constructors.add(TcfCaV1::new); + constructors.add(UspV1::new); + constructors.add(UsNat::new); + constructors.add(UsCa::new); + constructors.add(UsVa::new); + constructors.add(UsCo::new); + constructors.add(UsUt::new); + constructors.add(UsCt::new); + constructors.add(UsFl::new); + constructors.add(UsMt::new); + constructors.add(UsOr::new); + constructors.add(UsTx::new); + constructors.add(UsDe::new); + constructors.add(UsIa::new); + constructors.add(UsNe::new); + constructors.add(UsNh::new); + constructors.add(UsNj::new); + constructors.add(UsTn::new); + + for (Supplier> constructor : constructors) { + EncodableSection prototype = constructor.get(); + Integer id = prototype.getId(); + SECTION_ID_TO_CONSTRUCTOR.put(id, constructor); + SECTION_NAME_TO_ID.put(prototype.getName(), id); + } + } + + private final HashMap> sections = new HashMap<>(); private final HeaderV1 header; public GppModel() { @@ -50,97 +82,40 @@ public GppModel(String encodedString) { decode(encodedString); } - public void setFieldValue(int sectionId, FieldKey fieldName, Object value) { - setFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName, value); + public void setFieldValue(String sectionName, FieldKey fieldName, Object value) { + setFieldValue(SECTION_NAME_TO_ID.get(sectionName), fieldName, value); } - private EncodableSection getOrCreateSection(String sectionName) { - EncodableSection section = this.sections.get(sectionName); + private EncodableSection getOrCreateSection(Integer sectionId) { + EncodableSection section = this.sections.get(sectionId); if (section == null) { - switch(sectionName) { - case TcfEuV2.NAME: - section = new TcfEuV2(); - break; - case TcfCaV1.NAME: - section = new TcfCaV1(); - break; - case UspV1.NAME: - section = new UspV1(); - break; - case UsNat.NAME: - section = new UsNat(); - break; - case UsCa.NAME: - section = new UsCa(); - break; - case UsVa.NAME: - section = new UsVa(); - break; - case UsCo.NAME: - section = new UsCo(); - break; - case UsUt.NAME: - section = new UsUt(); - break; - case UsCt.NAME: - section = new UsCt(); - break; - case UsFl.NAME: - section = new UsFl(); - break; - case UsMt.NAME: - section = new UsMt(); - break; - case UsOr.NAME: - section = new UsOr(); - break; - case UsTx.NAME: - section = new UsTx(); - break; - case UsDe.NAME: - section = new UsDe(); - break; - case UsIa.NAME: - section = new UsIa(); - break; - case UsNe.NAME: - section = new UsNe(); - break; - case UsNh.NAME: - section = new UsNh(); - break; - case UsNj.NAME: - section = new UsNj(); - break; - case UsTn.NAME: - section = new UsTn(); - break; - } - if (section != null) { - this.sections.put(sectionName, section); + Supplier> constructor = SECTION_ID_TO_CONSTRUCTOR.get(sectionId); + if (constructor != null) { + section = constructor.get(); + this.sections.put(section.getId(), section); this.header.getSectionsIds().add(section.getId()); } } return section; } - public void setFieldValue(String sectionName, FieldKey fieldName, Object value) { + public void setFieldValue(int sectionId, FieldKey fieldName, Object value) { ensureDecode(); - EncodableSection section = getOrCreateSection(sectionName); + EncodableSection section = getOrCreateSection(sectionId); if (section != null) { section.setFieldValue(fieldName, value); } else { - throw new InvalidFieldException(sectionName + "." + fieldName + " not found"); + throw new InvalidFieldException(sectionId + "." + fieldName + " not found"); } } - public Object getFieldValue(int sectionId, FieldKey fieldName) { - return getFieldValue(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); + public Object getFieldValue(String sectionName, FieldKey fieldName) { + return getFieldValue(SECTION_NAME_TO_ID.get(sectionName), fieldName); } - public Object getFieldValue(String sectionName, FieldKey fieldName) { + public Object getFieldValue(int sectionId, FieldKey fieldName) { ensureDecode(); - EncodableSection field = this.sections.get(sectionName); + EncodableSection field = this.sections.get(sectionId); if (field != null) { return field.getFieldValue(fieldName); } else { @@ -148,13 +123,13 @@ public Object getFieldValue(String sectionName, FieldKey fieldName) { } } - public boolean hasField(int sectionId, FieldKey fieldName) { - return hasField(Sections.SECTION_ID_NAME_MAP.get(sectionId), fieldName); + public boolean hasField(String sectionName, FieldKey fieldName) { + return hasField(SECTION_NAME_TO_ID.get(sectionName), fieldName); } - public boolean hasField(String sectionName, FieldKey fieldName) { + public boolean hasField(int sectionId, FieldKey fieldName) { ensureDecode(); - EncodableSection field = this.sections.get(sectionName); + EncodableSection field = this.sections.get(sectionId); if (field != null) { return field.hasField(fieldName); } else { @@ -162,40 +137,35 @@ public boolean hasField(String sectionName, FieldKey fieldName) { } } - public boolean hasSection(int sectionId) { - return hasSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); + public boolean hasSection(String sectionName) { + return hasSection(SECTION_NAME_TO_ID.get(sectionName)); } - public boolean hasSection(String sectionName) { + public boolean hasSection(int sectionId) { ensureDecode(); - return this.sections.containsKey(sectionName); + return this.sections.containsKey(sectionId); } public HeaderV1 getHeader() { ensureDecode(); - try { - header.setFieldValue(HeaderV1Field.SECTION_IDS, this.getSectionIds()); - } catch (InvalidFieldException e) { - - } return header; } public EncodableSection getSection(int sectionId) { - return getSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); + ensureDecode(); + return this.sections.get(sectionId); } public EncodableSection getSection(String sectionName) { - ensureDecode(); - return this.sections.get(sectionName); + return getSection(SECTION_NAME_TO_ID.get(sectionName)); } - public void deleteSection(int sectionId) { - deleteSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); + public void deleteSection(String sectionName) { + deleteSection(SECTION_NAME_TO_ID.get(sectionName)); } - public void deleteSection(String sectionName) { - EncodableSection removed = this.sections.remove(sectionName); + public void deleteSection(int sectionId) { + EncodableSection removed = this.sections.remove(sectionId); if (removed != null) { this.header.getSectionsIds().remove(removed.getId()); } @@ -286,31 +256,16 @@ public UsTn getUsTnSection() { public List getSectionIds() { ensureDecode(); - int length = Sections.SECTION_ORDER.size(); - List sectionIds = new ArrayList<>(length); - for (int i = 0; i < length; i++) { - String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = this.sections.get(sectionName); - if (section != null) { - sectionIds.add(section.getId()); - } - } - return sectionIds; + return new ArrayList<>(header.getSectionsIds()); } @Override protected CharSequence doEncode() { - int length = Sections.SECTION_ORDER.size(); - List encodedSections = new ArrayList<>(length); + List encodedSections = new ArrayList<>(); encodedSections.add(header.encodeCharSequence()); - List sectionIds = new ArrayList<>(length); - for (int i = 0; i < length; i++) { - String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = sections.get(sectionName); - if (section != null) { - encodedSections.add(section.encodeCharSequence()); - sectionIds.add(section.getId()); - } + for (Integer sectionId: header.getSectionsIds()) { + EncodableSection section = sections.get(sectionId); + encodedSections.add(section.encodeCharSequence()); } return SlicedCharSequence.join('~', encodedSections); } @@ -328,85 +283,34 @@ protected void doDecode(CharSequence str) { PrimitiveIterator.OfInt it = header.getSectionsIds().iterator(); int i = 1; while (it.hasNext()) { - CharSequence section = encodedSections.get(i++); - switch (it.nextInt()) { - case TcfEuV2.ID: - sections.put(TcfEuV2.NAME, new TcfEuV2(section)); - break; - case TcfCaV1.ID: - sections.put(TcfCaV1.NAME, new TcfCaV1(section)); - break; - case UspV1.ID: - sections.put(UspV1.NAME, new UspV1(section)); - break; - case UsCa.ID: - sections.put(UsCa.NAME, new UsCa(section)); - break; - case UsNat.ID: - sections.put(UsNat.NAME, new UsNat(section)); - break; - case UsVa.ID: - sections.put(UsVa.NAME, new UsVa(section)); - break; - case UsCo.ID: - sections.put(UsCo.NAME, new UsCo(section)); - break; - case UsUt.ID: - sections.put(UsUt.NAME, new UsUt(section)); - break; - case UsCt.ID: - sections.put(UsCt.NAME, new UsCt(section)); - break; - case UsFl.ID: - sections.put(UsFl.NAME, new UsFl(section)); - break; - case UsMt.ID: - sections.put(UsMt.NAME, new UsMt(section)); - break; - case UsOr.ID: - sections.put(UsOr.NAME, new UsOr(section)); - break; - case UsTx.ID: - sections.put(UsTx.NAME, new UsTx(section)); - break; - case UsDe.ID: - sections.put(UsDe.NAME, new UsDe(section)); - break; - case UsIa.ID: - sections.put(UsIa.NAME, new UsIa(section)); - break; - case UsNe.ID: - sections.put(UsNe.NAME, new UsNe(section)); - break; - case UsNh.ID: - sections.put(UsNh.NAME, new UsNh(section)); - break; - case UsNj.ID: - sections.put(UsNj.NAME, new UsNj(section)); - break; - case UsTn.ID: - sections.put(UsTn.NAME, new UsTn(section)); - break; + CharSequence encodedSection = encodedSections.get(i++); + int sectionId = it.nextInt(); + EncodableSection section = getOrCreateSection(sectionId); + if (section != null) { + section.decode(encodedSection); + } else { + // we do not support encoding this section + header.getSectionsIds().removeInt(sectionId); } } } } else if (str.charAt(0) == 'C') { // old tcfeu only string - TcfEuV2 section = new TcfEuV2(str); - sections.put(TcfEuV2.NAME, section); + EncodableSection section = getOrCreateSection(TcfEuV2.ID); + section.decode(str); header.getSectionsIds().add(section.getId()); } else { throw new DecodingException("Unable to decode '" + str + "'"); } } - public String encodeSection(int sectionId) { - return encodeSection(Sections.SECTION_ID_NAME_MAP.get(sectionId)); + public String encodeSection(String sectionName) { + return encodeSection(SECTION_NAME_TO_ID.get(sectionName)); } - public String encodeSection(String sectionName) { + public String encodeSection(int sectionId) { ensureDecode(); - EncodableSection section = this.sections.get(sectionName); + EncodableSection section = this.sections.get(sectionId); if (section != null) { return section.encode(); } else { @@ -414,13 +318,13 @@ public String encodeSection(String sectionName) { } } - public void decodeSection(int sectionId, String encodedString) { - decodeSection(Sections.SECTION_ID_NAME_MAP.get(sectionId), encodedString); + public void decodeSection(String sectionName, String encodedString) { + decodeSection(SECTION_NAME_TO_ID.get(sectionName), encodedString); } - public void decodeSection(String sectionName, String encodedString) { + public void decodeSection(int sectionId, String encodedString) { ensureDecode(); - EncodableSection section = getOrCreateSection(sectionName); + EncodableSection section = getOrCreateSection(sectionId); if (section != null) { section.decode(encodedString); } @@ -441,10 +345,8 @@ public boolean isDirty() { if (header.isDirty()) { return true; } - int length = Sections.SECTION_ORDER.size(); - for (int i = 0; i < length; i++) { - String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = this.sections.get(sectionName); + for (Integer sectionId: header.getSectionsIds()) { + EncodableSection section = sections.get(sectionId); if (section != null && section.isDirty()) { return true; } @@ -455,10 +357,8 @@ public boolean isDirty() { @Override public void setDirty(boolean dirty) { header.setDirty(dirty); - int length = Sections.SECTION_ORDER.size(); - for (int i = 0; i < length; i++) { - String sectionName = Sections.SECTION_ORDER.get(i); - EncodableSection section = this.sections.get(sectionName); + for (Integer sectionId: header.getSectionsIds()) { + EncodableSection section = sections.get(sectionId); if (section != null) { section.setDirty(true); } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java deleted file mode 100644 index a438d217..00000000 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/Sections.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.iab.gpp.encoder.section; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -public final class Sections { - private Sections() {} - - public static final List SECTION_ORDER; - - public static final Map SECTION_ID_NAME_MAP; - - static { - SECTION_ID_NAME_MAP = new HashMap<>(); - - SECTION_ID_NAME_MAP.put(TcfEuV2.ID, TcfEuV2.NAME); - SECTION_ID_NAME_MAP.put(TcfCaV1.ID, TcfCaV1.NAME); - SECTION_ID_NAME_MAP.put(UspV1.ID, UspV1.NAME); - SECTION_ID_NAME_MAP.put(UsNat.ID, UsNat.NAME); - SECTION_ID_NAME_MAP.put(UsCa.ID, UsCa.NAME); - SECTION_ID_NAME_MAP.put(UsVa.ID, UsVa.NAME); - SECTION_ID_NAME_MAP.put(UsCo.ID, UsCo.NAME); - SECTION_ID_NAME_MAP.put(UsUt.ID, UsUt.NAME); - SECTION_ID_NAME_MAP.put(UsCt.ID, UsCt.NAME); - SECTION_ID_NAME_MAP.put(UsFl.ID, UsFl.NAME); - SECTION_ID_NAME_MAP.put(UsMt.ID, UsMt.NAME); - SECTION_ID_NAME_MAP.put(UsOr.ID, UsOr.NAME); - SECTION_ID_NAME_MAP.put(UsTx.ID, UsTx.NAME); - SECTION_ID_NAME_MAP.put(UsDe.ID, UsDe.NAME); - SECTION_ID_NAME_MAP.put(UsIa.ID, UsIa.NAME); - SECTION_ID_NAME_MAP.put(UsNe.ID, UsNe.NAME); - SECTION_ID_NAME_MAP.put(UsNh.ID, UsNh.NAME); - SECTION_ID_NAME_MAP.put(UsNj.ID, UsNj.NAME); - SECTION_ID_NAME_MAP.put(UsTn.ID, UsTn.NAME); - - SECTION_ORDER = new ArrayList(SECTION_ID_NAME_MAP.keySet()).stream().sorted() - .map(id -> SECTION_ID_NAME_MAP.get(id)).collect(Collectors.toList()); - } -} From a9e21093372d8d9a73fa195799541d9628ef82e1 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 23 Jan 2026 21:04:50 -0500 Subject: [PATCH 37/49] cleanup --- .../java/com/iab/gpp/encoder/GppModel.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index e5676edb..1a354f90 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -92,7 +92,7 @@ private EncodableSection getOrCreateSection(Integer sectionId) { Supplier> constructor = SECTION_ID_TO_CONSTRUCTOR.get(sectionId); if (constructor != null) { section = constructor.get(); - this.sections.put(section.getId(), section); + this.sections.put(sectionId, section); this.header.getSectionsIds().add(section.getId()); } } @@ -114,8 +114,7 @@ public Object getFieldValue(String sectionName, FieldKey fieldName) { } public Object getFieldValue(int sectionId, FieldKey fieldName) { - ensureDecode(); - EncodableSection field = this.sections.get(sectionId); + EncodableSection field = getSection(sectionId); if (field != null) { return field.getFieldValue(fieldName); } else { @@ -128,8 +127,7 @@ public boolean hasField(String sectionName, FieldKey fieldName) { } public boolean hasField(int sectionId, FieldKey fieldName) { - ensureDecode(); - EncodableSection field = this.sections.get(sectionId); + EncodableSection field = getSection(sectionId); if (field != null) { return field.hasField(fieldName); } else { @@ -165,6 +163,7 @@ public void deleteSection(String sectionName) { } public void deleteSection(int sectionId) { + ensureDecode(); EncodableSection removed = this.sections.remove(sectionId); if (removed != null) { this.header.getSectionsIds().remove(removed.getId()); @@ -172,6 +171,7 @@ public void deleteSection(int sectionId) { } public void clear() { + ensureDecode(); if (!this.sections.isEmpty()) { this.sections.clear(); this.header.getSectionsIds().clear(); @@ -289,7 +289,7 @@ protected void doDecode(CharSequence str) { if (section != null) { section.decode(encodedSection); } else { - // we do not support encoding this section + // we do not support re-encoding this section header.getSectionsIds().removeInt(sectionId); } } @@ -309,8 +309,7 @@ public String encodeSection(String sectionName) { } public String encodeSection(int sectionId) { - ensureDecode(); - EncodableSection section = this.sections.get(sectionId); + EncodableSection section = getSection(sectionId); if (section != null) { return section.encode(); } else { @@ -332,12 +331,14 @@ public void decodeSection(int sectionId, String encodedString) { public String toString() { ensureDecode(); - List sectionIds = getSectionIds(); - List pieces = new ArrayList<>(sectionIds.size()); - for (Integer sectionId : sectionIds) { - pieces.add(getSection(sectionId).toString()); + StringBuilder sb = new StringBuilder(); + sb.append('[').append(header); + for (Integer sectionId: header.getSectionsIds()) { + EncodableSection section = sections.get(sectionId); + sb.append(", ").append(section); } - return pieces.toString(); + sb.append(']'); + return sb.toString(); } @Override From 14e87aeab2f1e909f25777cc14929059ff7531b4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Fri, 23 Jan 2026 21:08:35 -0500 Subject: [PATCH 38/49] notes --- iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 1a354f90..9f7a0b36 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -34,11 +34,11 @@ public class GppModel extends AbstractEncodable { + // NOTE: we genrally use concrete types to avoid the cost of interface calls private static final HashMap>> SECTION_ID_TO_CONSTRUCTOR = new HashMap<>(); private static final HashMap SECTION_NAME_TO_ID = new HashMap<>(); static { - List>> constructors = new ArrayList<>(); // register section constructors here From 45f0c2b4611207445199551b9bcb916f938bbc20 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 19:53:57 -0500 Subject: [PATCH 39/49] use array --- .../gpp/encoder/section/EncodableSection.java | 63 +++++++++++-------- .../com/iab/gpp/encoder/section/HeaderV1.java | 3 +- .../com/iab/gpp/encoder/section/TcfCaV1.java | 18 +++--- .../com/iab/gpp/encoder/section/TcfEuV2.java | 30 +++++---- .../com/iab/gpp/encoder/section/UsCa.java | 20 +++--- .../com/iab/gpp/encoder/section/UsCo.java | 20 +++--- .../com/iab/gpp/encoder/section/UsCt.java | 20 +++--- .../com/iab/gpp/encoder/section/UsDe.java | 20 +++--- .../com/iab/gpp/encoder/section/UsFl.java | 3 +- .../com/iab/gpp/encoder/section/UsIa.java | 20 +++--- .../com/iab/gpp/encoder/section/UsMt.java | 20 +++--- .../com/iab/gpp/encoder/section/UsNat.java | 20 +++--- .../com/iab/gpp/encoder/section/UsNe.java | 20 +++--- .../com/iab/gpp/encoder/section/UsNh.java | 20 +++--- .../com/iab/gpp/encoder/section/UsNj.java | 20 +++--- .../com/iab/gpp/encoder/section/UsOr.java | 20 +++--- .../com/iab/gpp/encoder/section/UsTn.java | 20 +++--- .../com/iab/gpp/encoder/section/UsTx.java | 20 +++--- .../com/iab/gpp/encoder/section/UsUt.java | 3 +- .../com/iab/gpp/encoder/section/UsVa.java | 3 +- .../com/iab/gpp/encoder/section/UspV1.java | 3 +- 21 files changed, 181 insertions(+), 205 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java index 72d3bf4a..089ae70b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/EncodableSection.java @@ -9,12 +9,22 @@ public abstract class EncodableSection & FieldKey> extends AbstractEncodable { - protected final List> segments; + private final Object[] segments; - protected EncodableSection(List> segments) { + @SafeVarargs + protected EncodableSection(EncodableSegment... segments) { this.segments = segments; } + protected final int size() { + return segments.length; + } + + @SuppressWarnings("unchecked") + protected final EncodableSegment getSegment(int index) { + return (EncodableSegment) segments[index]; + } + public abstract int getId(); public abstract String getName(); @@ -23,26 +33,26 @@ protected EncodableSection(List> segments) { @Override protected void doDecode(CharSequence encodedString) { - int numSegments = segments.size(); + int numSegments = size(); if (numSegments == 1) { - segments.get(0).decode(encodedString); + getSegment(0).decode(encodedString); return; } List encodedSegments = SlicedCharSequence.split(encodedString, '.'); for (int i = 0; i < numSegments; i++) { - segments.get(i).decode(encodedSegments.get(i)); + getSegment(i).decode(encodedSegments.get(i)); } } @Override protected CharSequence doEncode() { - int numSegments = segments.size(); + int numSegments = size(); if (numSegments == 1) { - return segments.get(0).encodeCharSequence(); + return getSegment(0).encodeCharSequence(); } List encodedSegments = new ArrayList<>(numSegments); for (int i = 0; i < numSegments; i++) { - encodedSegments.add(segments.get(i).encodeCharSequence()); + encodedSegments.add(getSegment(i).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); } @@ -50,9 +60,9 @@ protected CharSequence doEncode() { public final boolean hasField(FieldKey fieldName) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null && segment.getField(key) != null) { return true; @@ -65,9 +75,9 @@ public final boolean hasField(FieldKey fieldName) { public final boolean hasField(E fieldName) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); if (segment.getField(fieldName) != null) { return true; } @@ -79,9 +89,9 @@ public final boolean hasField(E fieldName) { public final Object getFieldValue(FieldKey fieldName) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null) { DataType field = segment.getField(key); @@ -97,9 +107,9 @@ public final Object getFieldValue(FieldKey fieldName) { public final Object getFieldValue(E fieldName) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); DataType field = segment.getField(fieldName); if (field != null) { return field.getValue(); @@ -112,9 +122,9 @@ public final Object getFieldValue(E fieldName) { public final void setFieldValue(FieldKey fieldName, Object value) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); E key = segment.resolveKey(fieldName); if (key != null) { DataType field = segment.getField(key); @@ -132,9 +142,9 @@ public final void setFieldValue(FieldKey fieldName, Object value) { public final void setFieldValue(E fieldName, Object value) { ensureDecode(); - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - EncodableSegment segment = segments.get(i); + EncodableSegment segment = getSegment(i); DataType field = segment.getField(fieldName); if(field != null) { field.setValue(value); @@ -152,9 +162,9 @@ protected void onSet(E fieldName) { @Override public final boolean isDirty() { - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - if (segments.get(i).isDirty()) { + if (getSegment(i).isDirty()) { return true; } } @@ -163,9 +173,9 @@ public final boolean isDirty() { @Override public final void setDirty(boolean dirty) { - int numSegments = segments.size(); + int numSegments = size(); for (int i = 0; i < numSegments; i++) { - segments.get(i).setDirty(dirty); + getSegment(i).setDirty(dirty); } } @@ -174,8 +184,9 @@ public final String toString() { ensureDecode(); StringBuilder sb = new StringBuilder(); sb.append("{id=").append(getId()).append(", name=").append(getName()).append(", version=").append(getVersion()); - for (EncodableSegment segment : segments) { - sb.append(", ").append(segment.toString()); + int numSegments = size(); + for (int i = 0; i < numSegments; i++) { + sb.append(", ").append(getSegment(i).toString()); } sb.append('}'); return sb.toString(); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java index 6bcd8d55..4f23d3b1 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/HeaderV1.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.field.HeaderV1Field; import com.iab.gpp.encoder.segment.HeaderV1CoreSegment; @@ -12,7 +11,7 @@ public class HeaderV1 extends EncodableSection { public static final String NAME = "header"; public HeaderV1() { - super(Collections.singletonList(new HeaderV1CoreSegment())); + super(new HeaderV1CoreSegment()); } public HeaderV1(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index bb461535..261dd565 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -2,13 +2,11 @@ import java.time.Instant; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfCaV1Field; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.TcfCaV1CoreSegment; import com.iab.gpp.encoder.segment.TcfCaV1DisclosedVendorsSegment; import com.iab.gpp.encoder.segment.TcfCaV1PublisherPurposesSegment; @@ -20,7 +18,7 @@ public class TcfCaV1 extends EncodableSection { public static final String NAME = "tcfcav1"; public TcfCaV1() { - super(Arrays.>asList(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment())); + super(new TcfCaV1CoreSegment(), new TcfCaV1PublisherPurposesSegment(), new TcfCaV1DisclosedVendorsSegment()); } public TcfCaV1(CharSequence encodedString) { @@ -64,11 +62,11 @@ protected void doDecode(CharSequence encodedString) { char firstChar = encodedSegment.charAt(0); if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegment); + getSegment(0).decode(encodedSegment); } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(2).decode(encodedSegment); + getSegment(2).decode(encodedSegment); } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegment); + getSegment(1).decode(encodedSegment); } else { throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } @@ -78,12 +76,12 @@ protected void doDecode(CharSequence encodedString) { @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + encodedSegments.add(getSegment(1).encodeCharSequence()); if(!this.getDisclosedVendors().isEmpty()) { - encodedSegments.add(segments.get(2).encodeCharSequence()); + encodedSegments.add(getSegment(2).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index d953f315..c931a4fa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -2,13 +2,11 @@ import java.time.Instant; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.RangeEntry; import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; import com.iab.gpp.encoder.field.TcfEuV2Field; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.TcfEuV2CoreSegment; import com.iab.gpp.encoder.segment.TcfEuV2PublisherPurposesSegment; import com.iab.gpp.encoder.segment.TcfEuV2VendorsAllowedSegment; @@ -21,7 +19,7 @@ public class TcfEuV2 extends EncodableSection { public static final String NAME = "tcfeuv2"; public TcfEuV2() { - super(Arrays.>asList(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment())); + super(new TcfEuV2CoreSegment(), new TcfEuV2PublisherPurposesSegment(), new TcfEuV2VendorsAllowedSegment(), new TcfEuV2VendorsDisclosedSegment()); } public TcfEuV2(CharSequence encodedString) { @@ -67,13 +65,13 @@ public void doDecode(CharSequence encodedString) { // unfortunately, the segment ordering doesn't match the segment ids if(firstChar >= 'A' && firstChar <= 'H') { - segments.get(0).decode(encodedSegment); + getSegment(0).decode(encodedSegment); } else if(firstChar >= 'I' && firstChar <= 'P') { - segments.get(3).decode(encodedSegment); + getSegment(3).decode(encodedSegment); } else if(firstChar >= 'Q' && firstChar <= 'X') { - segments.get(2).decode(encodedSegment); + getSegment(2).decode(encodedSegment); } else if((firstChar >= 'Y' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'f')) { - segments.get(1).decode(encodedSegment); + getSegment(1).decode(encodedSegment); } else { throw new DecodingException("Invalid segment '" + encodedSegment + "'"); } @@ -83,21 +81,21 @@ public void doDecode(CharSequence encodedString) { @Override public CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); - if (segments.size() >= 1) { - encodedSegments.add(segments.get(0).encodeCharSequence()); + List encodedSegments = new ArrayList<>(size()); + if (size() >= 1) { + encodedSegments.add(getSegment(0).encodeCharSequence()); Boolean isServiceSpecific = (Boolean) this.getFieldValue(TcfEuV2Field.IS_SERVICE_SPECIFIC); if (isServiceSpecific) { - if (segments.size() >= 2) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + if (size() >= 2) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } } else { - if (segments.size() >= 2) { - encodedSegments.add(segments.get(2).encodeCharSequence()); + if (size() >= 2) { + encodedSegments.add(getSegment(2).encodeCharSequence()); - if (segments.size() >= 3) { - encodedSegments.add(segments.get(3).encodeCharSequence()); + if (size() >= 3) { + encodedSegments.add(getSegment(3).encodeCharSequence()); } } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index d5ab9d13..aea95ba5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCaField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCaCoreSegment; import com.iab.gpp.encoder.segment.UsCaGpcSegment; @@ -16,7 +14,7 @@ public class UsCa extends EncodableSection { public static final String NAME = "usca"; public UsCa() { - super(Arrays.>asList(new UsCaCoreSegment(), new UsCaGpcSegment())); + super(new UsCaCoreSegment(), new UsCaGpcSegment()); } public UsCa(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsCaField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 89b8f8e2..8cb51769 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCoField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCoCoreSegment; import com.iab.gpp.encoder.segment.UsCoGpcSegment; @@ -16,7 +14,7 @@ public class UsCo extends EncodableSection { public static final String NAME = "usco"; public UsCo() { - super(Arrays.>asList(new UsCoCoreSegment(), new UsCoGpcSegment())); + super(new UsCoCoreSegment(), new UsCoGpcSegment()); } public UsCo(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsCoField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index 96a59d57..d82f9442 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsCtField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsCtCoreSegment; import com.iab.gpp.encoder.segment.UsCtGpcSegment; @@ -16,7 +14,7 @@ public class UsCt extends EncodableSection { public static final String NAME = "usct"; public UsCt() { - super(Arrays.>asList(new UsCtCoreSegment(), new UsCtGpcSegment())); + super(new UsCtCoreSegment(), new UsCtGpcSegment()); } public UsCt(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsCtField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index 5e72b828..f1d12cfa 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsDeField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsDeCoreSegment; import com.iab.gpp.encoder.segment.UsDeGpcSegment; @@ -16,7 +14,7 @@ public class UsDe extends EncodableSection { public static final String NAME = "usde"; public UsDe() { - super(Arrays.>asList(new UsDeCoreSegment(), new UsDeGpcSegment())); + super(new UsDeCoreSegment(), new UsDeGpcSegment()); } public UsDe(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if (segments.size() >= 2 && segments.get(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if (size() >= 2 && getSegment(1).getFieldValue(UsDeField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java index fc444871..fe9de548 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsFl.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsFlField; import com.iab.gpp.encoder.segment.UsFlCoreSegment; @@ -12,7 +11,7 @@ public class UsFl extends EncodableSection { public static final String NAME = "usfl"; public UsFl() { - super(Collections.singletonList(new UsFlCoreSegment())); + super(new UsFlCoreSegment()); } public UsFl(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 87e7a493..1b9e159b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsIaField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsIaCoreSegment; import com.iab.gpp.encoder.segment.UsIaGpcSegment; @@ -16,7 +14,7 @@ public class UsIa extends EncodableSection { public static final String NAME = "usia"; public UsIa() { - super(Arrays.>asList(new UsIaCoreSegment(), new UsIaGpcSegment())); + super(new UsIaCoreSegment(), new UsIaGpcSegment()); } public UsIa(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if (segments.size() >= 2 && segments.get(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if (size() >= 2 && getSegment(1).getFieldValue(UsIaField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index 56ee980d..bc014bf7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; -import java.util.Arrays; import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsMtField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsMtCoreSegment; import com.iab.gpp.encoder.segment.UsMtGpcSegment; @@ -16,7 +14,7 @@ public class UsMt extends EncodableSection { public static final String NAME = "usmt"; public UsMt() { - super(Arrays.>asList(new UsMtCoreSegment(), new UsMtGpcSegment())); + super(new UsMtCoreSegment(), new UsMtGpcSegment()); } public UsMt(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsMtField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 44e85cc7..92036efd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNatField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNatCoreSegment; import com.iab.gpp.encoder.segment.UsNatGpcSegment; @@ -16,7 +14,7 @@ public class UsNat extends EncodableSection { public static final String NAME = "usnat"; public UsNat() { - super(Arrays.>asList(new UsNatCoreSegment(), new UsNatGpcSegment())); + super(new UsNatCoreSegment(), new UsNatGpcSegment()); } public UsNat(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsNatField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 54fb595f..7bbb4856 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNeField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNeCoreSegment; import com.iab.gpp.encoder.segment.UsNeGpcSegment; @@ -16,7 +14,7 @@ public class UsNe extends EncodableSection { public static final String NAME = "usne"; public UsNe() { - super(Arrays.>asList(new UsNeCoreSegment(), new UsNeGpcSegment())); + super(new UsNeCoreSegment(), new UsNeGpcSegment()); } public UsNe(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsNeField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index 4c29c10e..cdb533b6 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNhField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNhCoreSegment; import com.iab.gpp.encoder.segment.UsNhGpcSegment; @@ -16,7 +14,7 @@ public class UsNh extends EncodableSection { public static final String NAME = "usnh"; public UsNh() { - super(Arrays.>asList(new UsNhCoreSegment(), new UsNhGpcSegment())); + super(new UsNhCoreSegment(), new UsNhGpcSegment()); } public UsNh(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsNhField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index a0731775..720b74cc 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsNjField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsNjCoreSegment; import com.iab.gpp.encoder.segment.UsNjGpcSegment; @@ -16,7 +14,7 @@ public class UsNj extends EncodableSection { public static final String NAME = "usnj"; public UsNj() { - super(Arrays.>asList(new UsNjCoreSegment(), new UsNjGpcSegment())); + super(new UsNjCoreSegment(), new UsNjGpcSegment()); } public UsNj(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsNjField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index edb73dbe..81c0293a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; -import java.util.Arrays; import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsOrField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsOrCoreSegment; import com.iab.gpp.encoder.segment.UsOrGpcSegment; @@ -16,7 +14,7 @@ public class UsOr extends EncodableSection { public static final String NAME = "usor"; public UsOr() { - super(Arrays.>asList(new UsOrCoreSegment(), new UsOrGpcSegment())); + super(new UsOrCoreSegment(), new UsOrGpcSegment()); } public UsOr(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsOrField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index 32cd04fe..a04d9b81 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTnField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsTnCoreSegment; import com.iab.gpp.encoder.segment.UsTnGpcSegment; @@ -16,7 +14,7 @@ public class UsTn extends EncodableSection { public static final String NAME = "ustn"; public UsTn() { - super(Arrays.>asList(new UsTnCoreSegment(), new UsTnGpcSegment())); + super(new UsTnCoreSegment(), new UsTnGpcSegment()); } public UsTn(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); if(encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if(encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsTnField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index 56ad82ad..c932fe98 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -1,11 +1,9 @@ package com.iab.gpp.encoder.section; -import java.util.Arrays; import java.util.ArrayList; import java.util.List; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsTxField; -import com.iab.gpp.encoder.segment.EncodableSegment; import com.iab.gpp.encoder.segment.UsTxCoreSegment; import com.iab.gpp.encoder.segment.UsTxGpcSegment; @@ -16,7 +14,7 @@ public class UsTx extends EncodableSection { public static final String NAME = "ustx"; public UsTx() { - super(Arrays.>asList(new UsTxCoreSegment(), new UsTxGpcSegment())); + super(new UsTxCoreSegment(), new UsTxGpcSegment()); } public UsTx(CharSequence encodedString) { @@ -44,24 +42,24 @@ protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); if (encodedSegments.size() > 0) { - segments.get(0).decode(encodedSegments.get(0)); + getSegment(0).decode(encodedSegments.get(0)); } if (encodedSegments.size() > 1) { - segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); - segments.get(1).decode(encodedSegments.get(1)); + getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); + getSegment(1).decode(encodedSegments.get(1)); } else { - segments.get(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); + getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, false); } } @Override protected CharSequence doEncode() { - List encodedSegments = new ArrayList<>(segments.size()); + List encodedSegments = new ArrayList<>(size()); - encodedSegments.add(segments.get(0).encodeCharSequence()); - if(segments.size() >= 2 && segments.get(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { - encodedSegments.add(segments.get(1).encodeCharSequence()); + encodedSegments.add(getSegment(0).encodeCharSequence()); + if(size() >= 2 && getSegment(1).getFieldValue(UsTxField.GPC_SEGMENT_INCLUDED).equals(true)) { + encodedSegments.add(getSegment(1).encodeCharSequence()); } return SlicedCharSequence.join('.', encodedSegments); diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java index 9cd0fce8..68a7a729 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsUt.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsUtField; import com.iab.gpp.encoder.segment.UsUtCoreSegment; @@ -12,7 +11,7 @@ public class UsUt extends EncodableSection { public static final String NAME = "usut"; public UsUt() { - super(Collections.singletonList(new UsUtCoreSegment())); + super(new UsUtCoreSegment()); } public UsUt(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java index 05fc17e2..ee12afe5 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsVa.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.datatype.FixedIntegerList; import com.iab.gpp.encoder.field.UsVaField; import com.iab.gpp.encoder.segment.UsVaCoreSegment; @@ -12,7 +11,7 @@ public class UsVa extends EncodableSection { public static final String NAME = "usva"; public UsVa() { - super(Collections.singletonList(new UsVaCoreSegment())); + super(new UsVaCoreSegment()); } public UsVa(CharSequence encodedString) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java index e8f231be..615badc3 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UspV1.java @@ -1,6 +1,5 @@ package com.iab.gpp.encoder.section; -import java.util.Collections; import com.iab.gpp.encoder.field.UspV1Field; import com.iab.gpp.encoder.segment.UspV1CoreSegment; @@ -11,7 +10,7 @@ public class UspV1 extends EncodableSection { public static final String NAME = "uspv1"; public UspV1() { - super(Collections.singletonList(new UspV1CoreSegment())); + super(new UspV1CoreSegment()); } public UspV1(CharSequence encodedString) { From fba9fbbb06ac7b6800c984d6b412499a5a3235f9 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 19:57:26 -0500 Subject: [PATCH 40/49] cleanup --- .../src/main/java/com/iab/gpp/encoder/GppModel.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 9f7a0b36..89c7c496 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -93,7 +93,7 @@ private EncodableSection getOrCreateSection(Integer sectionId) { if (constructor != null) { section = constructor.get(); this.sections.put(sectionId, section); - this.header.getSectionsIds().add(section.getId()); + this.header.getSectionsIds().addInt(section.getId()); } } return section; @@ -166,7 +166,7 @@ public void deleteSection(int sectionId) { ensureDecode(); EncodableSection removed = this.sections.remove(sectionId); if (removed != null) { - this.header.getSectionsIds().remove(removed.getId()); + this.header.getSectionsIds().removeInt(removed.getId()); } } @@ -298,7 +298,6 @@ protected void doDecode(CharSequence str) { // old tcfeu only string EncodableSection section = getOrCreateSection(TcfEuV2.ID); section.decode(str); - header.getSectionsIds().add(section.getId()); } else { throw new DecodingException("Unable to decode '" + str + "'"); } From 647eb79841bd98bfb397ea8773557de25bce88e9 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Mon, 26 Jan 2026 21:25:44 -0500 Subject: [PATCH 41/49] another size --- .../src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java | 3 ++- .../src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java | 3 ++- .../src/main/java/com/iab/gpp/encoder/section/UsCa.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsCo.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsCt.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsDe.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsIa.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsMt.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsNat.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsNe.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsNh.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsNj.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsOr.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsTn.java | 5 +++-- .../src/main/java/com/iab/gpp/encoder/section/UsTx.java | 5 +++-- 15 files changed, 43 insertions(+), 28 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java index 261dd565..18566835 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfCaV1.java @@ -44,7 +44,8 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < encodedSegments.size(); i++) { + int numEncodedSegments = encodedSegments.size(); + for (int i = 0; i < numEncodedSegments; i++) { /** * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java index c931a4fa..54b54042 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/TcfEuV2.java @@ -45,7 +45,8 @@ public int getVersion() { @Override public void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); - for (int i = 0; i < encodedSegments.size(); i++) { + int numEncodedSegments = encodedSegments.size(); + for (int i = 0; i < numEncodedSegments; i++) { /** * The first 3 bits contain the segment id. Rather than decode the entire string, just check the first character. diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java index aea95ba5..751b3efd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCa.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsCaField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java index 8cb51769..6edcdc50 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCo.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsCoField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java index d82f9442..ae5d2425 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsCt.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsCtField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java index f1d12cfa..b8813500 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsDe.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsDeField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java index 1b9e159b..b3aed14b 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsIa.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsIaField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java index bc014bf7..37ad215a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsMt.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsMtField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java index 92036efd..c120e0b0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNat.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsNatField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java index 7bbb4856..4ecd1d52 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNe.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsNeField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java index cdb533b6..d4df1a83 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNh.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsNhField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java index 720b74cc..973d850a 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsNj.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsNjField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java index 81c0293a..8c976cea 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsOr.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsOrField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java index a04d9b81..bc60d071 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTn.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString,'.'); + int numEncodedSegments = encodedSegments.size(); - if(encodedSegments.size() > 0) { + if(numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if(encodedSegments.size() > 1) { + if(numEncodedSegments > 1) { getSegment(1).setFieldValue(UsTnField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java index c932fe98..05c1d5c0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/UsTx.java @@ -40,12 +40,13 @@ public int getVersion() { @Override protected void doDecode(CharSequence encodedString) { List encodedSegments = SlicedCharSequence.split(encodedString, '.'); + int numEncodedSegments = encodedSegments.size(); - if (encodedSegments.size() > 0) { + if (numEncodedSegments > 0) { getSegment(0).decode(encodedSegments.get(0)); } - if (encodedSegments.size() > 1) { + if (numEncodedSegments > 1) { getSegment(1).setFieldValue(UsTxField.GPC_SEGMENT_INCLUDED, true); getSegment(1).decode(encodedSegments.get(1)); } else { From 46843c744e3a754cd428d520507c381769422ff0 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 27 Jan 2026 20:57:57 -0500 Subject: [PATCH 42/49] fix sizing --- .../src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java | 2 +- .../com/iab/gpp/encoder/datatype/encoder/IntegerSet.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 3c9f4b92..09242b3f 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -23,7 +23,7 @@ public BitSet(int initialCapacity) { } public BitSet() { - this(0); + this(new long[0]); } public static int wordIndex(int index) { diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java index 241cbf00..04757d67 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/encoder/IntegerSet.java @@ -33,12 +33,12 @@ public IntegerSet(BitSet bitSet, int from, int to, int adjustment) { this.adjustment = adjustment; } - public IntegerSet(int limit) { - this(new BitSet(), 0, limit, 0); + public IntegerSet(int limit) { + this(new BitSet(limit), 0, limit, 0); } public IntegerSet() { - this(MAX_COLLECTION_SIZE); + this(new BitSet(), 0, MAX_COLLECTION_SIZE, 0); } @Override From e50a578032b5c03e4e1dc32aab9278d26fa431ab Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Tue, 27 Jan 2026 21:28:41 -0500 Subject: [PATCH 43/49] fix dirty on init --- .../datatype/AbstractEncodableBitStringDataType.java | 12 ++++++++---- .../iab/gpp/encoder/datatype/EncodableBoolean.java | 2 +- .../iab/gpp/encoder/datatype/EncodableDatetime.java | 2 +- .../encoder/datatype/EncodableFibonacciInteger.java | 4 ++-- .../gpp/encoder/datatype/EncodableFixedInteger.java | 2 +- .../encoder/datatype/EncodableFixedIntegerList.java | 2 +- .../gpp/encoder/datatype/EncodableFixedString.java | 2 +- .../iab/gpp/encoder/datatype/UnencodableBoolean.java | 2 +- .../iab/gpp/encoder/section/AbstractEncodable.java | 1 - 9 files changed, 16 insertions(+), 13 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java index 78abff3c..fe7f9842 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java @@ -9,8 +9,8 @@ public abstract class AbstractEncodableBitStringDataType extends EncodableDataType { //this if for backwards compatibility with the newer fields protected boolean hardFailIfMissing = true; - protected boolean dirty = false; - protected Predicate validator = null; + private boolean dirty = false; + private Predicate validator = null; protected T value; protected AbstractEncodableBitStringDataType(boolean hardFailIfMissing) { @@ -30,12 +30,16 @@ public final T getValue() { return this.value; } - @SuppressWarnings("unchecked") public void setValue(Object value) { + setValue(value, true); + } + + @SuppressWarnings("unchecked") + protected final void setValue(Object value, boolean dirty) { T v = (T) value; if (validator == null || validator.test(v)) { this.value = v; - this.dirty = true; + this.dirty = dirty; } else { if (v instanceof Collection) { throw new ValidationException("Invalid value '" diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java index 20a66fb4..d04af67c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java @@ -10,7 +10,7 @@ public final class EncodableBoolean extends AbstractEncodableBitStringDataType Date: Tue, 27 Jan 2026 22:07:11 -0500 Subject: [PATCH 44/49] ; --- .../com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 7b34c036..0ddf6dee 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -43,7 +43,7 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { int nextIndex = index + BASE64_BITS; int n = FixedIntegerEncoder.decode(bitString, index, nextIndex); str.append(DICT.charAt(n)); - index = nextIndex;; + index = nextIndex; } catch (DecodingException e) { throw new EncodingException("Unencodable Base64Url '" + bitString + "'"); } From 4e7366331305963c776e8c2544f61a807f6a8d2b Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 00:24:35 -0500 Subject: [PATCH 45/49] upgrade slicing methodology to use indexOf --- .../encoder/section/SlicedCharSequence.java | 38 +++++++++++++------ 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java index 234bf439..c9b2aaa2 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -6,27 +6,43 @@ public final class SlicedCharSequence implements CharSequence { private static final String EMPTY = ""; - private final CharSequence base; + private final String base; private final int start; private final int end; - private SlicedCharSequence(CharSequence base, int start, int end) { + private SlicedCharSequence(String base, int start, int end) { this.base = base; this.start = start; this.end = end; } public static List split(CharSequence charSequence, char splitter) { - List out = new ArrayList<>(1); - int length = charSequence.length(); - int start = 0; - for (int i = 0; i < length; i++) { - if (charSequence.charAt(i) == splitter) { - out.add(new SlicedCharSequence(charSequence, start, i)); - start = i + 1; - } + // the first time we see some other CharSequence we convert to a String. + // this keeps all derived SlicedCharSequence instances anchored to the same base String. + // this is important because String.indexOf internally uses an optimized intrinsic. + // CharSequence does not have indexOf, only charAt which is quite slow in comparison. + // also we avoid a recursive structure of SlicedCharSequence. + String base; + int start; + int end; + if (charSequence instanceof SlicedCharSequence) { + SlicedCharSequence slicedCharSequence = (SlicedCharSequence) charSequence; + base = slicedCharSequence.base; + start = slicedCharSequence.start; + end = slicedCharSequence.end; + } else { + base = charSequence.toString(); + start = 0; + end = base.length(); + } + // most sections/segments have less than 4 components + List out = new ArrayList<>(4); + int next = 0; + while ((next = base.indexOf(splitter, start, end)) != -1) { + out.add(new SlicedCharSequence(base, start, next)); + start = next + 1; } - out.add(new SlicedCharSequence(charSequence, start, length)); + out.add(new SlicedCharSequence(base, start, end)); return out; } From f463f6bd99debbcc433a17453b833e631dbac7a4 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 00:37:01 -0500 Subject: [PATCH 46/49] substring --- .../java/com/iab/gpp/encoder/section/SlicedCharSequence.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java index c9b2aaa2..85c7e5f7 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/section/SlicedCharSequence.java @@ -84,7 +84,7 @@ public CharSequence subSequence(int newStart, int newEnd) { @Override public String toString() { - return base.subSequence(start, end).toString(); + return base.substring(start, end); } } From a8d48c579c3a7ae083bbfb55dad5ef210f61a1c0 Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 00:44:54 -0500 Subject: [PATCH 47/49] clear only if something was there --- .../src/main/java/com/iab/gpp/encoder/GppModel.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java index 89c7c496..c21c4a9c 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/GppModel.java @@ -273,8 +273,10 @@ protected CharSequence doEncode() { @Override protected void doDecode(CharSequence str) { if (str == null || str.isEmpty() || (str.charAt(0) == 'D' && str.charAt(1) == 'B')) { - sections.clear(); - header.getSectionsIds().clear(); + if (!sections.isEmpty()) { + sections.clear(); + header.getSectionsIds().clear(); + } if(str != null && !str.isEmpty()) { List encodedSections = SlicedCharSequence.split(str, '~'); From 9ea3b0884ab4ef4848c3c34e4ebb755d8700ebcc Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 13:57:39 -0500 Subject: [PATCH 48/49] do base64 in blocks --- .../base64/AbstractBase64UrlEncoder.java | 70 +++++++++++++------ .../com/iab/gpp/encoder/bitstring/BitSet.java | 45 +++++++----- 2 files changed, 73 insertions(+), 42 deletions(-) diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java index 0ddf6dee..39a29ac0 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/base64/AbstractBase64UrlEncoder.java @@ -13,21 +13,22 @@ public abstract class AbstractBase64UrlEncoder { protected abstract void pad(BitStringBuilder bitString); private static final int BASE64_BITS = 6; - private static final long NO_SYMBOL = -1; + private static final int NO_SYMBOL = -1; /** * Base 64 URL character set. Different from standard Base64 char set in that '+' and '/' are * replaced with '-' and '_'. */ private static final String DICT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; private static final int REVERSE_DICT_SIZE = 128; - private static final long[] REVERSE_DICT = new long[REVERSE_DICT_SIZE]; + private static final int[] REVERSE_DICT = new int[REVERSE_DICT_SIZE]; static { Arrays.fill(REVERSE_DICT, NO_SYMBOL); for (int i = 0; i < DICT.length(); i++) { // NOTE: the bit string is stored in a long[] and read from LSB to MSB // but each base64 digit is read from MSB to LSB // so they need to be reversed. - REVERSE_DICT[DICT.charAt(i)] = Long.reverse(i) >>> -BASE64_BITS; + int value = Integer.reverse(i) >>> -BASE64_BITS; + REVERSE_DICT[DICT.charAt(i)] = value; } } @@ -53,28 +54,51 @@ public StringBuilder encode(BitStringBuilder bitStringBuilder) { } public BitString decode(CharSequence str) { - int length = str.length(); - int bitLength = length * BASE64_BITS; - long [] words = new long[bitLength / BitSet.BITS_PER_WORD + 1]; - int bitIndex = 0; - for (int i = 0; i < length; i++) { - char c = str.charAt(i); - long n = NO_SYMBOL; - if (c < REVERSE_DICT_SIZE) { - n = REVERSE_DICT[c]; + try { + int length = str.length(); + int bitLength = length * BASE64_BITS; + int numBlocks = length >> 2; + byte[] words = new byte[(numBlocks + 1) * 3]; + int limit = numBlocks << 2; + int dst = 0; + int src = 0; + while (src < limit) { + int b1 = REVERSE_DICT[str.charAt(src++)]; + int b2 = REVERSE_DICT[str.charAt(src++)]; + int b3 = REVERSE_DICT[str.charAt(src++)]; + int b4 = REVERSE_DICT[str.charAt(src++)]; + if ((b1 | b2 | b3 | b4) < 0) { + throw new DecodingException("Undecodable Base64URL string"); + } + int bits0 = b4 << 18 | b3 << 12 | b2 << 6 | b1; + words[dst++] = (byte)(bits0); + words[dst++] = (byte)(bits0 >> 8); + words[dst++] = (byte)(bits0 >> 16); } - if (n == NO_SYMBOL) { - throw new DecodingException("Undecodable Base64URL string"); + if (length > limit) { + remainder(str, words, length, src, dst); } - int wordIndex = BitSet.wordIndex(bitIndex); - words[wordIndex] |= (n << bitIndex); - int nextBitIndex = bitIndex + BASE64_BITS; - int nextWordIndex = BitSet.wordIndex(nextBitIndex); - if(wordIndex != nextWordIndex) { - words[nextWordIndex] = n >>> (BitSet.BITS_PER_WORD - bitIndex); - } - bitIndex = nextBitIndex; + return new BitString(new BitSet(words), bitLength); + } catch (ArrayIndexOutOfBoundsException e) { + throw new DecodingException("Undecodable Base64URL string"); + } + } + + private static final void remainder(CharSequence str, byte[] words, int length, int src, int dst) { + int b1 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; + src++; + int b2 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; + src++; + int b3 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; + src++; + int b4 = src < length ? REVERSE_DICT[str.charAt(src)] : 0; + src++; + if ((b1 | b2 | b3 | b4) < 0) { + throw new DecodingException("Undecodable Base64URL string"); } - return new BitString(new BitSet(words), bitLength); + int bits0 = b4 << 18 | b3 << 12 | b2 << 6 | b1; + words[dst++] = (byte)(bits0); + words[dst++] = (byte)(bits0 >> 8); + words[dst++] = (byte)(bits0 >> 16); } } diff --git a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java index 09242b3f..cdc65ccd 100644 --- a/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java +++ b/iabgpp-encoder/src/main/java/com/iab/gpp/encoder/bitstring/BitSet.java @@ -1,29 +1,32 @@ package com.iab.gpp.encoder.bitstring; import java.util.Arrays; +import java.util.Base64; +import com.iab.gpp.encoder.base64.TraditionalBase64UrlEncoder; +import com.iab.gpp.encoder.datatype.encoder.IntegerSet; import com.iab.gpp.encoder.error.DecodingException; // a thin version of java.util.BitSet public final class BitSet { - private static final int ADDRESS_BITS_PER_WORD = 6; + private static final int ADDRESS_BITS_PER_WORD = 3; public static final int BITS_PER_WORD = 1 << ADDRESS_BITS_PER_WORD; /* Used to shift left or right for a partial word mask */ - private static final long WORD_MASK = 0xffffffffffffffffL; + private static final int WORD_MASK = 0xffffffff; - private long[] words; + private byte[] words; - public BitSet(long[] words) { + public BitSet(byte[] words) { this.words = words; } public BitSet(int initialCapacity) { - this(new long[wordIndex(initialCapacity) + 1]); + this(new byte[wordIndex(initialCapacity) + 1]); } public BitSet() { - this(new long[0]); + this(new byte[0]); } public static int wordIndex(int index) { @@ -33,8 +36,8 @@ public static int wordIndex(int index) { return index >> ADDRESS_BITS_PER_WORD; } - private long[] ensureIndex(int wordIndex) { - long[] words = this.words; + private byte[] ensureIndex(int wordIndex) { + byte[] words = this.words; int wordsUsed = words.length; if (wordIndex >= wordsUsed) { int request = Math.max(2 * wordsUsed, wordIndex + 1); @@ -44,11 +47,12 @@ private long[] ensureIndex(int wordIndex) { return words; } - public boolean get(int index) { - int wordIndex = wordIndex(index); - long[] words = this.words; + public boolean get(int bitIndex) { + int wordIndex = wordIndex(bitIndex); + byte[] words = this.words; + int bit = bitIndex % BITS_PER_WORD; return (wordIndex < words.length) - && ((words[wordIndex] & (1L << index)) != 0); + && ((words[wordIndex] >>> bit) & 1) == 1; } public void clear(int from, int to) { @@ -59,25 +63,27 @@ public void clear(int from, int to) { public void clear(int bitIndex) { int wordIndex = wordIndex(bitIndex); - long[] words = this.words; + byte[] words = this.words; if (wordIndex < words.length) { - words[wordIndex] &= ~(1L << bitIndex); + int bit = bitIndex % BITS_PER_WORD; + words[wordIndex] &= ~(1 << bit); } } public int nextSetBit(int fromIndex) { - long[] words = this.words; + byte[] words = this.words; int wordsInUse = words.length; int u = wordIndex(fromIndex); if (u >= wordsInUse) { return -1; } - long word = words[u] & (WORD_MASK << fromIndex); + int bit = fromIndex % BITS_PER_WORD; + int word = words[u] & (WORD_MASK << bit); while (true) { if (word != 0) { - return (u * BITS_PER_WORD) + Long.numberOfTrailingZeros(word); + return (u * BITS_PER_WORD) + Integer.numberOfTrailingZeros(word); } if (++u == wordsInUse) { return -1; @@ -94,7 +100,8 @@ public void set(int from, int to) { public void set(int bitIndex) { int wordIndex = wordIndex(bitIndex); - long[] words = ensureIndex(wordIndex); - words[wordIndex] |= (1L << bitIndex); + byte[] words = ensureIndex(wordIndex); + int bit = bitIndex % BITS_PER_WORD; + words[wordIndex] |= (1 << bit); } } From 5c1d47393856dc6363c6020244a783f825cb706a Mon Sep 17 00:00:00 2001 From: James Yuzawa Date: Wed, 28 Jan 2026 14:38:27 -0500 Subject: [PATCH 49/49] add base 64 test --- .../TraditionalBase64UrlEncoderTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java index 52a02e9c..a4fb89dc 100644 --- a/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java +++ b/iabgpp-encoder/src/test/java/com/iab/gpp/encoder/base64/TraditionalBase64UrlEncoderTest.java @@ -25,5 +25,23 @@ public void testDecode2() { public void testDecode3() { Assertions.assertEquals("000011000001000000000001100011110000000000000000", base64UrlEncoder.decode("DBABjwAA").toString()); } + + @Test + public void testDifferingLengthDecodes() { + for (int length = 0; length < 1000; length++) { + StringBuilder in = new StringBuilder(); + StringBuilder out = new StringBuilder(); + for (int i = 0; i < length; i++) { + if (i % 2 == 0) { + in.append('u'); + out.append("101110"); + } else { + in.append('d'); + out.append("011101"); + } + } + Assertions.assertEquals(out.toString(), base64UrlEncoder.decode(in.toString()).toString()); + } + } }